From 85422d9d59ff5b9a89cd6e9af9d587360a32d29b Mon Sep 17 00:00:00 2001 From: MeltyPlayer Date: Tue, 6 Dec 2022 17:38:17 -0600 Subject: [PATCH] Verified that audio has been initialized before playing sounds or ticking audio. --- src/libsm64.c | 5 +++++ src/load_audio_data.c | 4 ++++ src/load_audio_data.h | 2 ++ src/play_sound.c | 11 +++++++---- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/libsm64.c b/src/libsm64.c index 7476efc..c3df3e7 100644 --- a/src/libsm64.c +++ b/src/libsm64.c @@ -144,6 +144,11 @@ SM64_LIB_FN void sm64_audio_init( uint8_t *rom ) { #define SAMPLES_LOW 528 extern SM64_LIB_FN uint32_t sm64_audio_tick( uint32_t numQueuedSamples, uint32_t numDesiredSamples, int16_t *audio_buffer ) { + if ( !is_audio_initialized ) { + DEBUG_PRINT("Attempted to tick audio, but sm64_audio_init() has not been called yet."); + return 0; + } + update_game_sound(); u32 num_audio_samples = numQueuedSamples < numDesiredSamples ? SAMPLES_HIGH : SAMPLES_LOW; diff --git a/src/load_audio_data.c b/src/load_audio_data.c index 4ff206a..5fe394f 100644 --- a/src/load_audio_data.c +++ b/src/load_audio_data.c @@ -4,6 +4,8 @@ #include "decomp/audio/load.h" #include "decomp/audio/load_dat.h" +bool is_audio_initialized = false; + extern void load_audio_banks( uint8_t *rom ) { uint8_t *rom2 = malloc( 0x800000 ); @@ -20,4 +22,6 @@ extern void load_audio_banks( uint8_t *rom ) { audio_init(); sound_init(); sound_reset( 0 ); + + is_audio_initialized = true; } \ No newline at end of file diff --git a/src/load_audio_data.h b/src/load_audio_data.h index 6d9c537..97c2d84 100644 --- a/src/load_audio_data.h +++ b/src/load_audio_data.h @@ -2,4 +2,6 @@ #include +extern bool is_audio_initialized; + extern void load_audio_banks( uint8_t *rom ); \ No newline at end of file diff --git a/src/play_sound.c b/src/play_sound.c index c05c7e2..59ccf5b 100644 --- a/src/play_sound.c +++ b/src/play_sound.c @@ -2,14 +2,17 @@ #include "decomp/audio/external.h" #include "debug_print.h" +#include "load_audio_data.h" SM64PlaySoundFunctionPtr g_play_sound_func = NULL; extern void play_sound( uint32_t soundBits, f32 *pos ) { - DEBUG_PRINT("$ play_sound(%d) request %d; pos %f %f %f\n", soundBits,sSoundRequestCount,pos[0],pos[1],pos[2]); - sSoundRequests[sSoundRequestCount].soundBits = soundBits; - sSoundRequests[sSoundRequestCount].position = pos; - sSoundRequestCount++; + if ( is_audio_initialized ) { + DEBUG_PRINT("$ play_sound(%d) request %d; pos %f %f %f\n", soundBits,sSoundRequestCount,pos[0],pos[1],pos[2]); + sSoundRequests[sSoundRequestCount].soundBits = soundBits; + sSoundRequests[sSoundRequestCount].position = pos; + sSoundRequestCount++; + } if ( g_play_sound_func ) { g_play_sound_func(soundBits, pos);