From d283e4cb2a15e0891d4b58c157d7179ac968f8e9 Mon Sep 17 00:00:00 2001 From: Michael Alexsander Date: Wed, 14 May 2025 18:31:44 -0300 Subject: [PATCH] Ignore changes in "Master" bus while in the Audio Importer --- .../import/audio_stream_import_settings.cpp | 28 +++++++++++++++++++ editor/import/audio_stream_import_settings.h | 9 ++++++ 2 files changed, 37 insertions(+) diff --git a/editor/import/audio_stream_import_settings.cpp b/editor/import/audio_stream_import_settings.cpp index b5cca46e6e3..f70147423d0 100644 --- a/editor/import/audio_stream_import_settings.cpp +++ b/editor/import/audio_stream_import_settings.cpp @@ -226,6 +226,28 @@ void AudioStreamImportSettingsDialog::_preview_zoom_offset_changed(double) { _indicator->queue_redraw(); } +void AudioStreamImportSettingsDialog::_reset_master() { + master_state.bypass = AudioServer::get_singleton()->is_bus_bypassing_effects(0); + master_state.mute = AudioServer::get_singleton()->is_bus_mute(0); + master_state.volume = AudioServer::get_singleton()->get_bus_volume_db(0); + + AudioServer::get_singleton()->set_bus_bypass_effects(0, true); // We don't want effects interfering. + AudioServer::get_singleton()->set_bus_mute(0, false); + AudioServer::get_singleton()->set_bus_volume_db(0, 0); + + // Prevent the modifications from being saved. + AudioServer::get_singleton()->set_edited(false); +} + +void AudioStreamImportSettingsDialog::_load_master_state() { + AudioServer::get_singleton()->set_bus_bypass_effects(0, master_state.bypass); + AudioServer::get_singleton()->set_bus_mute(0, master_state.mute); + AudioServer::get_singleton()->set_bus_volume_db(0, master_state.volume); + + // Prevent the modifications from being saved. + AudioServer::get_singleton()->set_edited(false); +} + void AudioStreamImportSettingsDialog::_audio_changed() { if (!is_visible()) { return; @@ -237,12 +259,16 @@ void AudioStreamImportSettingsDialog::_audio_changed() { void AudioStreamImportSettingsDialog::_play() { if (_player->is_playing()) { + _load_master_state(); + // '_pausing' variable indicates that we want to pause the audio player, not stop it. See '_on_finished()'. _pausing = true; _player->stop(); _play_button->set_button_icon(get_editor_theme_icon(SNAME("MainPlay"))); set_process(false); } else { + _reset_master(); + _player->play(_current); _play_button->set_button_icon(get_editor_theme_icon(SNAME("Pause"))); set_process(true); @@ -250,6 +276,8 @@ void AudioStreamImportSettingsDialog::_play() { } void AudioStreamImportSettingsDialog::_stop() { + _load_master_state(); + _player->stop(); _play_button->set_button_icon(get_editor_theme_icon(SNAME("MainPlay"))); _current = 0; diff --git a/editor/import/audio_stream_import_settings.h b/editor/import/audio_stream_import_settings.h index eb6ad2d5baa..a345f717f0e 100644 --- a/editor/import/audio_stream_import_settings.h +++ b/editor/import/audio_stream_import_settings.h @@ -77,6 +77,15 @@ class AudioStreamImportSettingsDialog : public ConfirmationDialog { String importer; String path; + struct MasterState { + bool mute = false; + bool bypass = false; + float volume = 0; + } master_state; + + void _reset_master(); + void _load_master_state(); + void _audio_changed(); static AudioStreamImportSettingsDialog *singleton;