From 968ddb97590a54ce37ce1d4b60d6e3d093998cd7 Mon Sep 17 00:00:00 2001 From: TimeServ Date: Tue, 9 May 2006 20:43:39 +0000 Subject: [PATCH] attempt to fix waveout > 22Khz submit issues, support 8khz sound git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@2262 fc73d0e0-1445-4013-8a0c-d673dee63da5 --- engine/client/snd_dma.c | 17 ++++++++++++++--- engine/client/snd_win.c | 8 +++++++- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/engine/client/snd_dma.c b/engine/client/snd_dma.c index e1d1e7573..14278b503 100644 --- a/engine/client/snd_dma.c +++ b/engine/client/snd_dma.c @@ -181,14 +181,25 @@ static int SNDDMA_Init(soundcardinfo_t *sc, int *cardnum, int *drivernum) int st = 0; memset(sc, 0, sizeof(*sc)); - if (snd_khz.value >= 45) + //set by a slider + if (!snd_khz.value) + sc->sn.speed = 22050; +/* else if (snd_khz.value >= 195) + sc->sn.speed = 200000; + else if (snd_khz.value >= 180) + sc->sn.speed = 192000; + else if (snd_khz.value >= 90) + sc->sn.speed = 96000; */ + else if (snd_khz.value >= 45) sc->sn.speed = 48000; - else if (snd_khz.value >= 30) //set by a slider + else if (snd_khz.value >= 30) sc->sn.speed = 44100; else if (snd_khz.value >= 20) sc->sn.speed = 22050; - else + else if (snd_khz.value >= 10) sc->sn.speed = 11025; + else + sc->sn.speed = 8000; sd = &drivers[*drivernum]; if (!sd->ptr) diff --git a/engine/client/snd_win.c b/engine/client/snd_win.c index 4c847352f..ce62c5287 100644 --- a/engine/client/snd_win.c +++ b/engine/client/snd_win.c @@ -171,6 +171,7 @@ static void WAV_Submit(soundcardinfo_t *sc) LPWAVEHDR h; int wResult; wavhandle_t *wh = sc->handle; + int chunkstosubmit; // // find which sound blocks have completed @@ -194,7 +195,12 @@ static void WAV_Submit(soundcardinfo_t *sc) // // submit two new sound blocks // - while (((sc->snd_sent - sc->snd_completed) >> ((sc->sn.samplebits/8) - 1)) < 4) + if (sc->sn.speed <= 22050) + chunkstosubmit = 4; + else + chunkstosubmit = 4 + (sc->sn.speed/6000); + + while (((sc->snd_sent - sc->snd_completed) >> ((sc->sn.samplebits/8) - 1)) < chunkstosubmit) { h = wh->lpWaveHdr + ( sc->snd_sent&WAV_MASK );