diff --git a/driver.c b/driver.c index 99a96a218d..b9795818af 100644 --- a/driver.c +++ b/driver.c @@ -580,7 +580,7 @@ void init_audio(void) g_extern.measure_data.buffer_free_samples_count = 0; - if (g_extern.audio_active && g_extern.system.audio_callback) // Threaded driver is initially stopped. + if (g_extern.audio_active && !g_extern.audio_data.mute && g_extern.system.audio_callback) // Threaded driver is initially stopped. audio_start_func(); } diff --git a/frontend/frontend.c b/frontend/frontend.c index af01382f68..174f1a8084 100644 --- a/frontend/frontend.c +++ b/frontend/frontend.c @@ -253,7 +253,7 @@ int main(int argc, char *argv[]) driver_set_nonblock_state(driver.nonblock_state); - if (driver.audio_data && !audio_start_func()) + if (driver.audio_data && !g_extern.audio_data.mute && !audio_start_func()) { RARCH_ERR("Failed to resume audio driver. Will continue without audio.\n"); g_extern.audio_active = false; diff --git a/retroarch.c b/retroarch.c index 147da9aeb5..ec66560d50 100644 --- a/retroarch.c +++ b/retroarch.c @@ -2223,7 +2223,7 @@ static void check_pause(void) RARCH_LOG("Unpaused.\n"); if (driver.audio_data) { - if (!audio_start_func()) + if (!g_extern.audio_data.mute && !audio_start_func()) { RARCH_ERR("Failed to resume audio driver. Will continue without audio.\n"); g_extern.audio_active = false; @@ -2235,7 +2235,7 @@ static void check_pause(void) { RARCH_LOG("Unpaused.\n"); g_extern.is_paused = false; - if (driver.audio_data && !audio_start_func()) + if (driver.audio_data && !g_extern.audio_data.mute && !audio_start_func()) { RARCH_ERR("Failed to resume audio driver. Will continue without audio.\n"); g_extern.audio_active = false; @@ -2581,6 +2581,17 @@ static void check_mute(void) msg_queue_clear(g_extern.msg_queue); msg_queue_push(g_extern.msg_queue, msg, 1, 180); + if (driver.audio_data) + { + if (g_extern.audio_data.mute) + audio_stop_func(); + else if (!audio_start_func()) + { + RARCH_ERR("Failed to unmute audio.\n"); + g_extern.audio_active = false; + } + } + RARCH_LOG("%s\n", msg); }