Added eviltypeguy's significant patch to fixup command line arguments.

Added a __NO_GETOPT define until we can find a resolution for ragweed's problems
Added a patch from relnev to fix some sound problems where too many sounds are
playing at once.
This commit is contained in:
theoddone33
2001-04-14 19:07:38 +00:00
parent d5edeac915
commit 3d00b7f21a
3 changed files with 2193 additions and 2044 deletions

View File

@@ -435,72 +435,50 @@ void ShutdownApplication()
} }
#ifdef __LINUX__ #ifdef __LINUX__
void UpdateSound(void *userdata, Uint8 *stream, int len); void UpdateSound(void *userdata, Uint8 *stream, int len);
int InitSound (void) int InitSound (void)
{ {
static SDL_AudioSpec wanted; SDL_AudioSpec wanted;
const int freqtab[7] = { 8000, 11025, 22050, 44100, 16000, 32000, 48000 };
const int samptab[7] = { 64, 64, 128, 256, 128, 256, 256 };
SDL_LockAudio(); /* wait for callback to finish */
SDL_CloseAudio(); SDL_CloseAudio();
if (!SoundEnabled) return FALSE; if (!SoundEnabled) return FALSE;
PrevSoundQuality = SoundQuality; PrevSoundQuality = SoundQuality;
PrevStereoSound = StereoSound; PrevStereoSound = StereoSound;
switch(SoundQuality) { if (SoundQuality > 6)
case 0: SoundQuality = 1;
wanted.freq = 8000; wanted.freq = freqtab[SoundQuality];
wanted.samples = 1024*2;
break;
case 1:
wanted.freq = 11025;
wanted.samples = 1024*2;
break;
case 2:
wanted.freq = 22050;
wanted.samples = 1024*4;
break;
case 3:
wanted.freq = 44100;
wanted.samples = 1024*8;
break;
case 4:
wanted.freq = 16000;
wanted.samples = 1024*4;
break;
case 5:
wanted.freq = 32000;
wanted.samples = 1024*8;
break;
case 6:
wanted.freq = 48000;
wanted.samples = 1024*8;
break;
default:
wanted.freq = 11025;
wanted.samples = 1024*2;
break;
}
if (StereoSound) { if (StereoSound) {
wanted.channels = 2; wanted.channels = 2;
wanted.samples *= 2;
} else { } else {
wanted.channels = 1; wanted.channels = 1;
} }
wanted.samples /= 8; //wanted.samples = (wanted.freq / 60) * 2 * wanted.channels;
wanted.samples = samptab[SoundQuality] * 2 * wanted.channels;
wanted.format = AUDIO_S16LSB; wanted.format = AUDIO_S16LSB;
wanted.userdata = NULL; wanted.userdata = NULL;
wanted.callback = UpdateSound; wanted.callback = UpdateSound;
if (SDL_OpenAudio(&wanted, NULL) < 0) { if (SDL_OpenAudio(&wanted, NULL) < 0) {
fprintf(stderr, "Sound init failed!\n");
fprintf(stderr, "freq: %d, channels: %d, samples: %d\n", wanted.freq, wanted.channels, wanted.samples);
SoundEnabled = 0; SoundEnabled = 0;
return FALSE; return FALSE;
} }
SDL_PauseAudio(0); SDL_PauseAudio(0);
SDL_UnlockAudio();
return TRUE; return TRUE;
} }
#else // __WIN32__ #else // __WIN32__
@@ -1256,8 +1234,6 @@ void UnlockSurface(void)
void WinUpdateDevices(); void WinUpdateDevices();
DWORD NeedBuffer=1;
short Buffer[1800*2];
int Running=0; int Running=0;
unsigned char Noise[]={ unsigned char Noise[]={
@@ -1561,8 +1537,7 @@ SM_CYSCREEN )-WindowHeight);
extern unsigned int vidbuffer; extern unsigned int vidbuffer;
extern void SoundProcess(); extern void SoundProcess();
extern int DSPBuffer; extern int DSPBuffer[];
int * DSPBuffer1;
DWORD ScreenPtr; DWORD ScreenPtr;
DWORD ScreenPtr2; DWORD ScreenPtr2;
extern int GUI36hzcall(void); extern int GUI36hzcall(void);
@@ -1628,39 +1603,73 @@ void CheckTimers(void)
} }
} }
/* should we clear these on sound reset? */
DWORD BufferLeftOver=0;
short Buffer[1800*2];
#ifdef __LINUX__ #ifdef __LINUX__
void UpdateSound(void *userdata, Uint8 *stream, int len) void UpdateSound(void *userdata, Uint8 *stream, int len)
{ {
int SPCSize = 256; const int SPCSize = 256;
int DataNeeded; int DataNeeded;
int i; int i;
Uint8 *ptr; Uint8 *ptr;
len /= 2; /* only 16bit here */
ptr = stream; ptr = stream;
DataNeeded = len; DataNeeded = len;
//DataNeeded /= (SPCSize * 2); /* take care of the things we left behind last time */
//DataNeeded *= (SPCSize * 2); if (BufferLeftOver) {
DataNeeded -= BufferLeftOver;
memcpy(ptr, &Buffer[BufferLeftOver], (SPCSize-BufferLeftOver)*2);
ptr += (SPCSize-BufferLeftOver)*2;
BufferLeftOver = 0;
}
if (len & 255) { /* we'll save the rest first */
DataNeeded -= 256;
}
while (DataNeeded > 0) { while (DataNeeded > 0) {
SoundProcess(); SoundProcess();
DSPBuffer1=(int *)&DSPBuffer;
for (i = 0; i < SPCSize; i++) { for (i = 0; i < SPCSize; i++) {
if (T36HZEnabled) { if (T36HZEnabled) {
Buffer[i]=0; Buffer[i]=0;
} else { } else {
if(DSPBuffer1[i]>32767)Buffer[i]=32767; if(DSPBuffer[i]>32767)Buffer[i]=32767;
else if(DSPBuffer1[i]<-32767)Buffer[i]=-32767; else if(DSPBuffer[i]<-32767)Buffer[i]=-32767;
else Buffer[i]=DSPBuffer1[i]; else Buffer[i]=DSPBuffer[i];
} }
} }
memcpy(ptr, &Buffer[0], SPCSize*2); memcpy(ptr, &Buffer[0], SPCSize*2);
ptr += SPCSize*2; ptr += SPCSize*2;
DataNeeded -= (SPCSize*2); DataNeeded -= SPCSize;
}
if (DataNeeded) {
DataNeeded += 256;
BufferLeftOver = DataNeeded;
SoundProcess();
for (i = 0; i < SPCSize; i++) {
if (T36HZEnabled) {
Buffer[i] = 0;
} else {
if(DSPBuffer[i]>32767)Buffer[i]=32767;
else if(DSPBuffer[i]<-32767)Buffer[i]=-32767;
else Buffer[i]=DSPBuffer[i];
}
}
memcpy(ptr, &Buffer[0], DataNeeded*2);
} }
} }
#endif #endif

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff