diff --git a/src/audio/external.c b/src/audio/external.c index 1b71105fe..cfbe334bf 100644 --- a/src/audio/external.c +++ b/src/audio/external.c @@ -2622,7 +2622,11 @@ void play_toads_jingle(void) { /** * Called from threads: thread5_game_loop */ +void GameEngine_LockAudioThread(void); +void GameEngine_UnlockAudioThread(void); + void sound_reset(u8 presetId) { + GameEngine_LockAudioThread(); #ifndef VERSION_JP if (presetId >= 8) { presetId = 0; @@ -2651,6 +2655,7 @@ void sound_reset(u8 presetId) { D_80332108 = (D_80332108 & 0xf0) + presetId; gSoundMode = D_80332108 >> 4; sHasStartedFadeOut = FALSE; + GameEngine_UnlockAudioThread(); } /** diff --git a/src/port/Engine.cpp b/src/port/Engine.cpp index 50d0d374c..f1501e6e5 100644 --- a/src/port/Engine.cpp +++ b/src/port/Engine.cpp @@ -1182,6 +1182,14 @@ void GameEngine::EndAudioFrame() { } } +extern "C" void GameEngine_LockAudioThread() { + audio.mutex.lock(); +} + +extern "C" void GameEngine_UnlockAudioThread() { + audio.mutex.unlock(); +} + void GameEngine::AudioInit() { const auto resourceMgr = Ship::Context::GetInstance()->GetResourceManager(); resourceMgr->LoadResources("sound");