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:
@@ -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
2895
zsnes/src/ui.asm
2895
zsnes/src/ui.asm
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user