X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=snd_win.c;h=080122487a821d438a0e25eaad3070e4139294f0;hb=9b73f5e152089c02f4157b4f3cddcc884e3648cd;hp=b1c6b58bd0ba4493db73e44d3c7f03deb613f171;hpb=65f6c04779aa58c69929e0d22967bf152dac17c1;p=xonotic%2Fdarkplaces.git diff --git a/snd_win.c b/snd_win.c index b1c6b58b..08012248 100644 --- a/snd_win.c +++ b/snd_win.c @@ -17,8 +17,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include "quakedef.h" -#include "snd_main.h" #ifdef SUPPORTDIRECTX #ifndef DIRECTSOUND_VERSION @@ -31,6 +29,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #endif +#include "qtypes.h" +#include "quakedef.h" +#include "snd_main.h" + // ============================================================================== #ifndef _WAVEFORMATEXTENSIBLE_ @@ -82,13 +84,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 +461,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 +553,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 @@ -709,8 +718,8 @@ void SndSys_Submit (void) snd_sent++; else if (wResult == WAVERR_STILLPLAYING) { - if(developer.integer >= 1000) - Con_Print("waveOutWrite failed (too much sound data)\n"); + if(developer_insane.integer) + Con_DPrint("waveOutWrite failed (too much sound data)\n"); //h->dwFlags |= WHDR_DONE; //snd_sent++; } @@ -762,7 +771,7 @@ unsigned int SndSys_GetSoundTime (void) { if (snd_completed == snd_sent) { - Con_DPrint("Sound overrun\n"); + // Con_DPrint("Sound overrun\n"); break; }