1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-05 12:10:55 +00:00

Merge pull request #112170 from lawnjelly/disallow_muting_android

[3.x] Disallow muting on Android
This commit is contained in:
lawnjelly
2025-10-30 07:05:44 +00:00
committed by GitHub

View File

@@ -50,6 +50,10 @@
// #define GODOT_AUDIO_DRIVER_MANAGER_LOGGING_ENABLED // #define GODOT_AUDIO_DRIVER_MANAGER_LOGGING_ENABLED
#endif #endif
#ifdef ANDROID_ENABLED
#define GODOT_AUDIO_DRIVER_DISALLOW_MUTING
#endif
AudioDriver *AudioDriver::singleton = nullptr; AudioDriver *AudioDriver::singleton = nullptr;
AudioDriver *AudioDriver::get_singleton() { AudioDriver *AudioDriver::get_singleton() {
return singleton; return singleton;
@@ -182,10 +186,16 @@ int AudioDriverManager::driver_count = 1;
int AudioDriverManager::desired_driver_id = -2; int AudioDriverManager::desired_driver_id = -2;
int AudioDriverManager::actual_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. // 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 = AudioDriverManager::MuteFlags::MUTE_FLAG_DISABLED;
uint32_t AudioDriverManager::_mute_state_final = AudioDriverManager::MuteFlags::MUTE_FLAG_DISABLED; uint32_t AudioDriverManager::_mute_state_final = AudioDriverManager::MuteFlags::MUTE_FLAG_DISABLED;
uint32_t AudioDriverManager::_mute_state_mask = UINT32_MAX; uint32_t AudioDriverManager::_mute_state_mask = UINT32_MAX;
#endif
void AudioDriverManager::add_driver(AudioDriver *p_driver) { void AudioDriverManager::add_driver(AudioDriver *p_driver) {
ERR_FAIL_COND(driver_count >= MAX_DRIVERS); 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_silence = GLOBAL_DEF("audio/muting/mute_on_silence", false);
bool mute_on_focus_loss = GLOBAL_DEF("audio/muting/mute_on_focus_loss", 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. // Defaults for outside the editor.
#ifdef TOOLS_ENABLED #ifdef TOOLS_ENABLED
if (!(Engine::get_singleton()->is_editor_hint() || Main::is_project_manager())) { if (!(Engine::get_singleton()->is_editor_hint() || Main::is_project_manager())) {
#else #else
{ {
#endif #endif
#ifndef GODOT_AUDIO_DRIVER_DISALLOW_MUTING
// Note that these can be set differently on different platforms if desired. // Note that these can be set differently on different platforms if desired.
// e.g. Android may want to ensure mute when app paused etc. // e.g. Android may want to ensure mute when app paused etc.
_mute_state = mute_driver ? MuteFlags::MUTE_FLAG_DISABLED : 0; _mute_state = mute_driver ? MuteFlags::MUTE_FLAG_DISABLED : 0;
@@ -324,6 +344,7 @@ void AudioDriverManager::initialize(int p_driver) {
} }
_update_mute_state(); _update_mute_state();
#endif
} }
_set_driver(p_driver); _set_driver(p_driver);
@@ -335,10 +356,13 @@ AudioDriver *AudioDriverManager::get_driver(int p_driver) {
} }
void AudioDriverManager::_update_mute_state() { void AudioDriverManager::_update_mute_state() {
#ifndef GODOT_AUDIO_DRIVER_DISALLOW_MUTING
_mute_state_final = _mute_state & _mute_state_mask; _mute_state_final = _mute_state & _mute_state_mask;
#endif
} }
void AudioDriverManager::set_mute_sensitivity(MuteFlags p_flag, bool p_enabled) { void AudioDriverManager::set_mute_sensitivity(MuteFlags p_flag, bool p_enabled) {
#ifndef GODOT_AUDIO_DRIVER_DISALLOW_MUTING
if (p_enabled) { if (p_enabled) {
_mute_state_mask |= p_flag; _mute_state_mask |= p_flag;
} else { } else {
@@ -346,9 +370,12 @@ void AudioDriverManager::set_mute_sensitivity(MuteFlags p_flag, bool p_enabled)
} }
_update_mute_state(); _update_mute_state();
_set_driver(desired_driver_id); _set_driver(desired_driver_id);
#endif
} }
void AudioDriverManager::set_mute_flag(MuteFlags p_flag, bool p_enabled) { void AudioDriverManager::set_mute_flag(MuteFlags p_flag, bool p_enabled) {
#ifndef GODOT_AUDIO_DRIVER_DISALLOW_MUTING
#ifdef GODOT_AUDIO_DRIVER_MANAGER_LOGGING_ENABLED #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) + ")"); _log("set_mute_flag " + itos(p_flag) + " " + String(Variant(p_enabled)) + ", flags was " + itos(_mute_state) + " (final flags " + itos(_mute_state_final) + ")");
#endif #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) + ")"); _log("\tflags now " + itos(_mute_state) + " (final flags " + itos(_mute_state_final) + ")");
#endif #endif
_set_driver(desired_driver_id); _set_driver(desired_driver_id);
#endif
} }
////////////////////////////////////////////// //////////////////////////////////////////////