diff --git a/audio/audio_driver.c b/audio/audio_driver.c index 9278bd03d1..2bef556ce9 100644 --- a/audio/audio_driver.c +++ b/audio/audio_driver.c @@ -1338,9 +1338,10 @@ static void audio_driver_mixer_play_stream_internal( static void audio_driver_load_menu_bgm_callback(retro_task_t *task, void *task_data, void *user_data, const char *error) { - uint8_t flags = content_get_flags(); - if (!(flags & CONTENT_ST_FLAG_IS_INITED)) +#if defined(HAVE_AUDIOMIXER) && defined(HAVE_MENU) + if (menu_state_get_ptr()->flags & MENU_ST_FLAG_ALIVE) audio_driver_mixer_play_menu_sound_looped(AUDIO_MIXER_SYSTEM_SLOT_BGM); +#endif } void audio_driver_load_system_sounds(void) @@ -1460,6 +1461,7 @@ void audio_driver_load_system_sounds(void) if (path_down) task_push_audio_mixer_load(path_down, NULL, NULL, true, AUDIO_MIXER_SLOT_SELECTION_MANUAL, AUDIO_MIXER_SYSTEM_SLOT_DOWN); } + end: if (list) string_list_free(list); diff --git a/retroarch.c b/retroarch.c index 140e3944e9..8b0ab91b35 100644 --- a/retroarch.c +++ b/retroarch.c @@ -2958,10 +2958,20 @@ bool command_event(enum event_command cmd, void *data) break; case CMD_EVENT_AUDIO_STOP: midi_driver_set_all_sounds_off(); +#if defined(HAVE_AUDIOMIXER) && defined(HAVE_MENU) + if ( settings->bools.audio_enable_menu + && menu_state_get_ptr()->flags & MENU_ST_FLAG_ALIVE) + return false; +#endif if (!audio_driver_stop()) return false; break; case CMD_EVENT_AUDIO_START: +#if defined(HAVE_AUDIOMIXER) && defined(HAVE_MENU) + if ( settings->bools.audio_enable_menu + && menu_state_get_ptr()->flags & MENU_ST_FLAG_ALIVE) + return false; +#endif if (!audio_driver_start(runloop_st->flags & RUNLOOP_FLAG_SHUTDOWN_INITIATED)) return false; @@ -3931,6 +3941,13 @@ bool command_event(enum event_command cmd, void *data) video_st->flags &= ~VIDEO_FLAG_IS_SWITCHING_DISPLAY_MODE; audio_st->flags &= ~AUDIO_FLAG_SUSPENDED; +#if defined(HAVE_AUDIOMIXER) && defined(HAVE_MENU) + /* Menu sounds require audio reinit. */ + if ( settings->bools.audio_enable_menu + && menu_st->flags & MENU_ST_FLAG_ALIVE) + command_event(CMD_EVENT_AUDIO_REINIT, NULL); +#endif + if (userdata && *userdata == true) video_driver_cached_frame(); }