http://bugs.winehq.org/show_bug.cgi?id=29472
--- Comment #10 from Jörg Höhle hoehle@users.sourceforge.net 2012-01-03 16:53:04 CST --- http://forums.create.msdn.com/forums/t/9214.aspx explains DSBCAPS_*POSITION "by default DSound reports play cursors that increase in regular 10ms jumps." That's what GetCurrentPadding does, not GetPosition. TRUEPLAYPOSITION: increase more smoothly, for backwards compatibility When I read this I'm always tempted to implement the old behaviour by default...
Also interesting: http://www.lysator.liu.se/snes9x/1.42/changes.txt - Added yet another sound buffer option to the Windows port - this time the block size of sound data to mix. Some DirectSound sound card drivers only report the play position moving in steps rather than continuous amounts and Snes9x's default mix block size turned out to be smaller than this step value on several cards. Snes9x couldn't work out out where the true play position was accurately enough resulting in broken, noisy sound output.
Presumably positions reported modulo buffer size cause problems when you don't query them often enough to follow with pos += buffer_size.
We really need somebody to write the equivalent of my mmdevapi GetPosition render tests for DSound!