]> de.git.xonotic.org Git - xonotic/darkplaces.git/commitdiff
an attempt to fix waveOut sound on Vista
authorhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Tue, 8 Dec 2009 01:25:38 +0000 (01:25 +0000)
committerhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Tue, 8 Dec 2009 01:25:38 +0000 (01:25 +0000)
added snd_wav_partitionsize cvar (default 1024)

git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@9560 d7cf8633-e32d-0410-b094-e92efae38249

snd_win.c

index b1c6b58bd0ba4493db73e44d3c7f03deb613f171..ca33b89d7ab471159a2f8f1129cb614dd3d510d9 100644 (file)
--- a/snd_win.c
+++ b/snd_win.c
@@ -82,13 +82,14 @@ static const GUID MY_KSDATAFORMAT_SUBTYPE_PCM =
 // ==============================================================================
 
 extern HWND mainwindow;
+static cvar_t snd_wav_partitionsize = {CVAR_SAVE, "snd_wav_partitionsize", "1024", "controls sound delay in samples, values too low will cause crackling, too high will cause delayed sounds"};
+static qboolean sndsys_registeredcvars = false;
 
 #ifdef SUPPORTDIRECTX
 HRESULT (WINAPI *pDirectSoundCreate)(GUID FAR *lpGUID, LPDIRECTSOUND FAR *lplpDS, IUnknown FAR *pUnkOuter);
 #endif
 
-// Wave output: how much buffer time, and how many partitions in that time
-#define WAV_BUFFERTIME 0.125
+// Wave output: queue of this many sound buffers to play, reused cyclically
 #define        WAV_BUFFERS             16
 #define        WAV_MASK                (WAV_BUFFERS - 1)
 static unsigned int wav_buffer_size;
@@ -458,7 +459,7 @@ static qboolean SndSys_InitMmsystem (const snd_format_t* requested)
                }
        }
 
-       wav_buffer_size = ((int)(requested->speed * WAV_BUFFERTIME) / WAV_BUFFERS) * requested->channels * requested->width;
+       wav_buffer_size = bound(128, snd_wav_partitionsize.integer, 8192) * requested->channels * requested->width;
 
        /*
         * Allocate and lock memory for the waveform data. The memory
@@ -550,6 +551,12 @@ qboolean SndSys_Init (const snd_format_t* requested, snd_format_t* suggested)
 #endif
        sndinitstat     stat;
 
+       if (!sndsys_registeredcvars)
+       {
+               sndsys_registeredcvars = true;
+               Cvar_RegisterVariable(&snd_wav_partitionsize);
+       }
+
        Con_Print ("SndSys_Init: using the Win32 module\n");
 
 #ifdef SUPPORTDIRECTX