From 9eae65384cb0cd7340d0c27f56b3e3f764811a24 Mon Sep 17 00:00:00 2001 From: lawnjelly Date: Wed, 29 Oct 2025 15:46:09 +0000 Subject: [PATCH] Disallow muting on Android --- servers/audio_server.cpp | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/servers/audio_server.cpp b/servers/audio_server.cpp index 27d9a68aa31..1dc6ad8f01f 100644 --- a/servers/audio_server.cpp +++ b/servers/audio_server.cpp @@ -50,6 +50,10 @@ // #define GODOT_AUDIO_DRIVER_MANAGER_LOGGING_ENABLED #endif +#ifdef ANDROID_ENABLED +#define GODOT_AUDIO_DRIVER_DISALLOW_MUTING +#endif + AudioDriver *AudioDriver::singleton = nullptr; AudioDriver *AudioDriver::get_singleton() { return singleton; @@ -182,10 +186,16 @@ int AudioDriverManager::driver_count = 1; int AudioDriverManager::desired_driver_id = -2; int AudioDriverManager::actual_driver_id = -2; +#ifdef GODOT_AUDIO_DRIVER_DISALLOW_MUTING +uint32_t AudioDriverManager::_mute_state = 0; +uint32_t AudioDriverManager::_mute_state_final = 0; +uint32_t AudioDriverManager::_mute_state_mask = 0; +#else // Defaults are for the editor, outside the editor will be overridden. uint32_t AudioDriverManager::_mute_state = AudioDriverManager::MuteFlags::MUTE_FLAG_DISABLED; uint32_t AudioDriverManager::_mute_state_final = AudioDriverManager::MuteFlags::MUTE_FLAG_DISABLED; uint32_t AudioDriverManager::_mute_state_mask = UINT32_MAX; +#endif void AudioDriverManager::add_driver(AudioDriver *p_driver) { ERR_FAIL_COND(driver_count >= MAX_DRIVERS); @@ -301,12 +311,22 @@ void AudioDriverManager::initialize(int p_driver) { bool mute_on_silence = GLOBAL_DEF("audio/muting/mute_on_silence", false); bool mute_on_focus_loss = GLOBAL_DEF("audio/muting/mute_on_focus_loss", false); +#ifdef GODOT_AUDIO_DRIVER_DISALLOW_MUTING + // This is just to silence warnings. + (void)mute_driver; + (void)mute_on_pause; + (void)mute_on_silence; + (void)mute_on_focus_loss; +#endif + // Defaults for outside the editor. #ifdef TOOLS_ENABLED if (!(Engine::get_singleton()->is_editor_hint() || Main::is_project_manager())) { #else { #endif + +#ifndef GODOT_AUDIO_DRIVER_DISALLOW_MUTING // Note that these can be set differently on different platforms if desired. // e.g. Android may want to ensure mute when app paused etc. _mute_state = mute_driver ? MuteFlags::MUTE_FLAG_DISABLED : 0; @@ -324,6 +344,7 @@ void AudioDriverManager::initialize(int p_driver) { } _update_mute_state(); +#endif } _set_driver(p_driver); @@ -335,10 +356,13 @@ AudioDriver *AudioDriverManager::get_driver(int p_driver) { } void AudioDriverManager::_update_mute_state() { +#ifndef GODOT_AUDIO_DRIVER_DISALLOW_MUTING _mute_state_final = _mute_state & _mute_state_mask; +#endif } void AudioDriverManager::set_mute_sensitivity(MuteFlags p_flag, bool p_enabled) { +#ifndef GODOT_AUDIO_DRIVER_DISALLOW_MUTING if (p_enabled) { _mute_state_mask |= p_flag; } else { @@ -346,9 +370,12 @@ void AudioDriverManager::set_mute_sensitivity(MuteFlags p_flag, bool p_enabled) } _update_mute_state(); _set_driver(desired_driver_id); +#endif } void AudioDriverManager::set_mute_flag(MuteFlags p_flag, bool p_enabled) { +#ifndef GODOT_AUDIO_DRIVER_DISALLOW_MUTING + #ifdef GODOT_AUDIO_DRIVER_MANAGER_LOGGING_ENABLED _log("set_mute_flag " + itos(p_flag) + " " + String(Variant(p_enabled)) + ", flags was " + itos(_mute_state) + " (final flags " + itos(_mute_state_final) + ")"); #endif @@ -370,6 +397,8 @@ void AudioDriverManager::set_mute_flag(MuteFlags p_flag, bool p_enabled) { _log("\tflags now " + itos(_mute_state) + " (final flags " + itos(_mute_state_final) + ")"); #endif _set_driver(desired_driver_id); + +#endif } //////////////////////////////////////////////