Fixes audio problems on broken drivers (Diablo-D3)

This commit is contained in:
pagefault
2003-05-19 01:43:18 +00:00
parent 900f094c42
commit 4e4e7a3971

View File

@@ -507,7 +507,7 @@ void ProcessKeyBuf(int scancode)
int InitSound(void) int InitSound(void)
{ {
SDL_AudioSpec wanted; 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 }; const int freqtab[7] = { 8000, 11025, 22050, 44100, 16000, 32000, 48000 };
SDL_CloseAudio(); SDL_CloseAudio();
@@ -538,7 +538,16 @@ int InitSound(void)
wanted.channels = 1; 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.format = AUDIO_S16LSB;
wanted.userdata = NULL; wanted.userdata = NULL;
wanted.callback = UpdateSound; wanted.callback = UpdateSound;
@@ -553,9 +562,9 @@ int InitSound(void)
} }
SDL_PauseAudio(0); SDL_PauseAudio(0);
Buffer_len = (audiospec.size * 2); Buffer_len = (audiospec.size * 3);
Buffer_len = (Buffer_len + 255) & ~255; /* Align to SPCSize */ Buffer_len = (Buffer_len + 255) & ~255; /* Align to SPCSize */;
Buffer = malloc(Buffer_len); Buffer = malloc(Buffer_len+1);
return TRUE; return TRUE;
} }