From 4e4e7a3971a7001ef99ce96e51d1005d754729ed Mon Sep 17 00:00:00 2001 From: pagefault <> Date: Mon, 19 May 2003 01:43:18 +0000 Subject: [PATCH] Fixes audio problems on broken drivers (Diablo-D3) --- zsnes/src/linux/sdllink.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/zsnes/src/linux/sdllink.c b/zsnes/src/linux/sdllink.c index ac26bb1f..f8c8fc88 100644 --- a/zsnes/src/linux/sdllink.c +++ b/zsnes/src/linux/sdllink.c @@ -507,7 +507,7 @@ void ProcessKeyBuf(int scancode) int InitSound(void) { SDL_AudioSpec wanted; - const int samptab[7] = { 1, 1, 2, 4, 2, 4, 4 }; + const int freqtab[7] = { 8000, 11025, 22050, 44100, 16000, 32000, 48000 }; SDL_CloseAudio(); @@ -538,7 +538,16 @@ int InitSound(void) wanted.channels = 1; } - wanted.samples = samptab[SoundQuality] * 128 * wanted.channels; + wanted.samples = (freqtab[SoundQuality] * wanted.channels)/32; + + //printf("InitSound: %dhz, requesting %d sized buffer, " , freqtab[SoundQuality], wanted.samples); + + if (wanted.samples < 256) { wanted.samples = 256; } + else if(wanted.samples < 512) { wanted.samples = 512; } + else if(wanted.samples < 1024) { wanted.samples = 1024; } + else { wanted.samples = 2048; } // never exceed this. + + //printf("getting %d.\n",wanted.samples); wanted.format = AUDIO_S16LSB; wanted.userdata = NULL; wanted.callback = UpdateSound; @@ -553,9 +562,9 @@ int InitSound(void) } SDL_PauseAudio(0); - Buffer_len = (audiospec.size * 2); - Buffer_len = (Buffer_len + 255) & ~255; /* Align to SPCSize */ - Buffer = malloc(Buffer_len); + Buffer_len = (audiospec.size * 3); + Buffer_len = (Buffer_len + 255) & ~255; /* Align to SPCSize */; + Buffer = malloc(Buffer_len+1); return TRUE; }