update audio

This commit is contained in:
Logan McNaughton
2024-01-30 18:31:20 -07:00
parent 66d21131ef
commit 0606cf8aff
+25 -30
View File
@@ -17,7 +17,6 @@ static AUDIO_INFO AudioInfo;
static unsigned char primaryBuffer[0x40000]; static unsigned char primaryBuffer[0x40000];
static uint8_t mix_buffer[0x40000]; static uint8_t mix_buffer[0x40000];
static int VolIsMuted = 0; static int VolIsMuted = 0;
static unsigned int paused = 0;
static int ff = 0; static int ff = 0;
static int VolSDL = SDL_MIX_MAXVOLUME; static int VolSDL = SDL_MIX_MAXVOLUME;
@@ -30,7 +29,8 @@ void CloseAudio()
dev = 0; dev = 0;
} }
if(hardware_spec != NULL) free(hardware_spec); if (hardware_spec != NULL)
free(hardware_spec);
hardware_spec = NULL; hardware_spec = NULL;
} }
@@ -103,30 +103,29 @@ void InitAudio()
free(desired); free(desired);
hardware_spec = obtained; hardware_spec = obtained;
SDL_PauseAudioDevice(dev, 0); SDL_PauseAudioDevice(dev, 0);
paused = 0;
} }
EXPORT void CALL AiDacrateChanged( int SystemType ) EXPORT void CALL AiDacrateChanged(int SystemType)
{ {
if (!l_PluginInit) if (!l_PluginInit)
return; return;
switch (SystemType) switch (SystemType)
{ {
case SYSTEM_NTSC: case SYSTEM_NTSC:
GameFreq = 48681812 / (*AudioInfo.AI_DACRATE_REG + 1); GameFreq = 48681812 / (*AudioInfo.AI_DACRATE_REG + 1);
break; break;
case SYSTEM_PAL: case SYSTEM_PAL:
GameFreq = 49656530 / (*AudioInfo.AI_DACRATE_REG + 1); GameFreq = 49656530 / (*AudioInfo.AI_DACRATE_REG + 1);
break; break;
case SYSTEM_MPAL: case SYSTEM_MPAL:
GameFreq = 48628316 / (*AudioInfo.AI_DACRATE_REG + 1); GameFreq = 48628316 / (*AudioInfo.AI_DACRATE_REG + 1);
break; break;
} }
InitAudio(); InitAudio();
} }
EXPORT void CALL AiLenChanged( void ) EXPORT void CALL AiLenChanged(void)
{ {
if (!l_PluginInit) if (!l_PluginInit)
return; return;
@@ -136,15 +135,15 @@ EXPORT void CALL AiLenChanged( void )
unsigned int i; unsigned int i;
for ( i = 0 ; i < LenReg ; i += 4 ) for (i = 0; i < LenReg; i += 4)
{ {
// Left channel // Left channel
primaryBuffer[ i ] = p[ i + 2 ]; primaryBuffer[i] = p[i + 2];
primaryBuffer[ i + 1 ] = p[ i + 3 ]; primaryBuffer[i + 1] = p[i + 3];
// Right channel // Right channel
primaryBuffer[ i + 2 ] = p[ i ]; primaryBuffer[i + 2] = p[i];
primaryBuffer[ i + 3 ] = p[ i + 1 ]; primaryBuffer[i + 3] = p[i + 1];
} }
if (!VolIsMuted && !ff) if (!VolIsMuted && !ff)
@@ -153,15 +152,11 @@ EXPORT void CALL AiLenChanged( void )
unsigned int acceptable_latency = (hardware_spec->freq * 0.2) * 4; unsigned int acceptable_latency = (hardware_spec->freq * 0.2) * 4;
unsigned int min_latency = (hardware_spec->freq * 0.02) * 4; unsigned int min_latency = (hardware_spec->freq * 0.02) * 4;
if (!paused && audio_queued < min_latency) if (audio_queued < min_latency)
{ {
SDL_PauseAudioDevice(dev, 1); unsigned int pause_buffer_length = ((min_latency - audio_queued) * 2) & ~3;
paused = 1; SDL_memset(mix_buffer, 0, pause_buffer_length);
} SDL_QueueAudio(dev, mix_buffer, pause_buffer_length);
else if (paused && audio_queued >= (min_latency * 2))
{
SDL_PauseAudioDevice(dev, 0);
paused = 0;
} }
if (audio_queued < acceptable_latency) if (audio_queued < acceptable_latency)
@@ -173,7 +168,7 @@ EXPORT void CALL AiLenChanged( void )
} }
} }
EXPORT int CALL InitiateAudio( AUDIO_INFO Audio_Info ) EXPORT int CALL InitiateAudio(AUDIO_INFO Audio_Info)
{ {
if (!l_PluginInit) if (!l_PluginInit)
return 0; return 0;
@@ -194,7 +189,7 @@ EXPORT int CALL RomOpen(void)
return 1; return 1;
} }
EXPORT void CALL RomClosed( void ) EXPORT void CALL RomClosed(void)
{ {
if (!l_PluginInit) if (!l_PluginInit)
return; return;
@@ -245,7 +240,7 @@ EXPORT void CALL VolumeSetLevel(int level)
VolSDL = SDL_MIX_MAXVOLUME * level / 100; VolSDL = SDL_MIX_MAXVOLUME * level / 100;
} }
EXPORT const char * CALL VolumeGetString(void) EXPORT const char *CALL VolumeGetString(void)
{ {
static char VolumeString[32]; static char VolumeString[32];