From 0606cf8aff6c83d4dc39f2bdc1a80ae280565460 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Tue, 30 Jan 2024 18:31:20 -0700 Subject: [PATCH] update audio --- simple64-audio-sdl2/src/main.c | 55 ++++++++++++++++------------------ 1 file changed, 25 insertions(+), 30 deletions(-) diff --git a/simple64-audio-sdl2/src/main.c b/simple64-audio-sdl2/src/main.c index bfd3241..630dd1e 100644 --- a/simple64-audio-sdl2/src/main.c +++ b/simple64-audio-sdl2/src/main.c @@ -17,7 +17,6 @@ static AUDIO_INFO AudioInfo; static unsigned char primaryBuffer[0x40000]; static uint8_t mix_buffer[0x40000]; static int VolIsMuted = 0; -static unsigned int paused = 0; static int ff = 0; static int VolSDL = SDL_MIX_MAXVOLUME; @@ -30,7 +29,8 @@ void CloseAudio() dev = 0; } - if(hardware_spec != NULL) free(hardware_spec); + if (hardware_spec != NULL) + free(hardware_spec); hardware_spec = NULL; } @@ -103,30 +103,29 @@ void InitAudio() free(desired); hardware_spec = obtained; SDL_PauseAudioDevice(dev, 0); - paused = 0; } -EXPORT void CALL AiDacrateChanged( int SystemType ) +EXPORT void CALL AiDacrateChanged(int SystemType) { if (!l_PluginInit) return; switch (SystemType) { - case SYSTEM_NTSC: - GameFreq = 48681812 / (*AudioInfo.AI_DACRATE_REG + 1); - break; - case SYSTEM_PAL: - GameFreq = 49656530 / (*AudioInfo.AI_DACRATE_REG + 1); - break; - case SYSTEM_MPAL: - GameFreq = 48628316 / (*AudioInfo.AI_DACRATE_REG + 1); - break; + case SYSTEM_NTSC: + GameFreq = 48681812 / (*AudioInfo.AI_DACRATE_REG + 1); + break; + case SYSTEM_PAL: + GameFreq = 49656530 / (*AudioInfo.AI_DACRATE_REG + 1); + break; + case SYSTEM_MPAL: + GameFreq = 48628316 / (*AudioInfo.AI_DACRATE_REG + 1); + break; } InitAudio(); } -EXPORT void CALL AiLenChanged( void ) +EXPORT void CALL AiLenChanged(void) { if (!l_PluginInit) return; @@ -136,15 +135,15 @@ EXPORT void CALL AiLenChanged( void ) unsigned int i; - for ( i = 0 ; i < LenReg ; i += 4 ) + for (i = 0; i < LenReg; i += 4) { // Left channel - primaryBuffer[ i ] = p[ i + 2 ]; - primaryBuffer[ i + 1 ] = p[ i + 3 ]; + primaryBuffer[i] = p[i + 2]; + primaryBuffer[i + 1] = p[i + 3]; // Right channel - primaryBuffer[ i + 2 ] = p[ i ]; - primaryBuffer[ i + 3 ] = p[ i + 1 ]; + primaryBuffer[i + 2] = p[i]; + primaryBuffer[i + 3] = p[i + 1]; } if (!VolIsMuted && !ff) @@ -153,15 +152,11 @@ EXPORT void CALL AiLenChanged( void ) unsigned int acceptable_latency = (hardware_spec->freq * 0.2) * 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); - paused = 1; - } - else if (paused && audio_queued >= (min_latency * 2)) - { - SDL_PauseAudioDevice(dev, 0); - paused = 0; + unsigned int pause_buffer_length = ((min_latency - audio_queued) * 2) & ~3; + SDL_memset(mix_buffer, 0, pause_buffer_length); + SDL_QueueAudio(dev, mix_buffer, pause_buffer_length); } 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) return 0; @@ -194,7 +189,7 @@ EXPORT int CALL RomOpen(void) return 1; } -EXPORT void CALL RomClosed( void ) +EXPORT void CALL RomClosed(void) { if (!l_PluginInit) return; @@ -245,7 +240,7 @@ EXPORT void CALL VolumeSetLevel(int level) VolSDL = SDL_MIX_MAXVOLUME * level / 100; } -EXPORT const char * CALL VolumeGetString(void) +EXPORT const char *CALL VolumeGetString(void) { static char VolumeString[32];