There is a problem with Directsound and i810 soundcards. The test I just sent to wine-patches illustrates it very well.

Basically sounds are being played too fast.

Here's my understanding of the problem (if my memory and understanding of the logs is correct):

When DSound initializes it create a primary sound buffer and invokes winmm to actually get access to a sound device. The default format of
the primary buffer is 22050x16x2 (i.e. 22050Hz, 16 bit sound, stereo). This means the device it's going to get will be handled by msacm.drv which will be responsible for performing the conversions on the fly.

However during the primary buffer creation DSDB_MapPrimary gets invoked in wineoss and does an mmap of the hardware sound buffer.

So when we then play sound in a secondary sound buffer, this sound gets mixed into the primary buffer, but because of the mmap this then goes straight to the sound card with no further conversion. So you end up with a chipmunk sound effect since you play a 22050x16x2 sound at 48000x16x2.

I will try to make more tests to confirm this but does it seem to make sense? Should I look in some other direction? Any suggestion about a fix?

If you have an i810 soundcard you can reproduce by doing the following:
* apply "Add WINETEST_INTERACTIVE" from wine-patches
* apply "Add 'audiophile' DirectSound tests" from wine-patches
* cd dlls/dsound/tests
* make
* WINETEST_INTERACTIVE=1 ../../../tools/runtest -P wine -M dsound.dll -T ../../.. -p dsound_test.exe.so dsound.c

(you can also set WINETEST_DEBUG=2 to get more debug info about the test's buffer management, though this is probably not relevant here)

Alternately, you can download the latest Windows test binaries from my site (http://fgouget.free.fr/wine/winetests.zip) and run them using Wine, or on Windows:

set WINETEST_INTERACTIVE=1
dsound_test dsound

Actually I would be interested in the results of this test on Windows:
* the test tone is usually played three times. Are all three, and especially the first one, at the right pitch?
* what is the output of the test? I'm interested in reported capabilities as stated by Windows and Wine for instance (to determine whether the primary buffer is emulated for instance).
* what is the primary buffer's default format? 22050x16x2? (that's not supported by the sound card!)
* does the winmm test work?
set WINETEST_INTERACTIVE=1
winmm_test wave
* in particular, what happens when the test tone is played with WAVE_FORMAT_DIRECT on Windows? (except Win9x platforms which don't support that flag)


--
Francois Gouget
[EMAIL PROTECTED]



Reply via email to