Print volume in dsound test

Francois Gouget fgouget at
Fri Jul 16 16:59:30 CDT 2004

Running the dsound test in interactive mode on Windows shows that 
creating a primary DirectSound buffer does not change the volume. Here's 
how to check this for yourself:

  * fire up your favorite Windows, make sure you have DirectX 9.0 (makes 
it impossible to do DirectX tests on NT4 :-( )
  * grab a copy of dsound_crosstest.exe
  * set the 'Wave volume' to some low value
  * in a command line console do
    dsound_crosstest.exe dsound

You will notice that the test tones all play at the voulme you have set. 
dsound_crosstest.exe will also print something like:

dsound.c:560:Playing a 5 seconds reference tone at the current volume.
dsound.c:562:(the current volume is -1800 according to DirectSound)

Contrast this with running the same test in Wine:

  * set the PCM volume to some low value
  * run WINETEST_INTERACTIVE=1 wine dsound_crosstest.exe dsound

You will immediately notice that the tet tones play at full-blast! Don't 
do this at night! dsound_crosstest will also confirm that DirectSound 
claims the volume is set to the max:

dsound.c:560:Playing a 5 seconds reference tone at the current volume.
dsound.c:562:(the current volume is 0 according to DirectSound)

So first the test, next will be trying to get DirectSound not to hack 
the volume without reason:


  * dlls/dsound/tests/dsound.c

    Francois Gouget <fgouget at>
    Get and print the DirectSound primary buffer volume.

Francois Gouget
fgouget at

-------------- next part --------------
Index: dlls/dsound/tests/dsound.c
RCS file: /var/cvs/wine/dlls/dsound/tests/dsound.c,v
retrieving revision 1.24
diff -u -r1.24 dsound.c
--- dlls/dsound/tests/dsound.c	13 Jul 2004 23:35:09 -0000	1.24
+++ dlls/dsound/tests/dsound.c	16 Jul 2004 16:23:51 -0000
@@ -537,10 +533,12 @@
     ZeroMemory(&bufdesc, sizeof(bufdesc));
-    bufdesc.dwFlags=DSBCAPS_PRIMARYBUFFER;
     ok(rc==DS_OK && primary!=NULL,"CreateSoundBuffer failed to create a primary buffer: 0x%lx\n",rc);
     if (rc==DS_OK && primary!=NULL) {
+        LONG vol;
         /* Try to create a second primary buffer */
         /* DSOUND: Error: The primary buffer already exists.  Any changes made to the buffer description will be ignored. */
@@ -554,9 +552,14 @@
         /* rc=0x88780032 */
         ok(rc!=DS_OK,"IDirectSound_DuplicateSoundBuffer primary buffer should have failed 0x%lx\n",rc);
+        rc=IDirectSoundBuffer_GetVolume(primary,&vol);
+        ok(rc==DS_OK,"GetVolume failed: 0x%lx\n",rc);
         if (winetest_interactive)
-            trace("Playing a 5 seconds reference tone.\n");
+            trace("Playing a 5 seconds reference tone at the current volume.\n");
+            if (rc==DS_OK)
+                trace("(the current volume is %ld according to DirectSound)\n",vol);
             trace("All subsequent tones should be identical to this one.\n");
             trace("Listen for stutter, changes in pitch, volume, etc.\n");

More information about the wine-patches mailing list