Merge pull request #106415 from YeldhamDev/desobey_your_master

Ignore changes in "Master" bus while in the Audio Importer
This commit is contained in:
Thaddeus Crews 2025-09-30 20:10:40 -05:00
commit 9d7663398a
No known key found for this signature in database
GPG key ID: 8C6E5FEB5FC03CCC
2 changed files with 37 additions and 0 deletions

View file

@ -226,6 +226,28 @@ void AudioStreamImportSettingsDialog::_preview_zoom_offset_changed(double) {
_indicator->queue_redraw(); _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() { void AudioStreamImportSettingsDialog::_audio_changed() {
if (!is_visible()) { if (!is_visible()) {
return; return;
@ -237,12 +259,16 @@ void AudioStreamImportSettingsDialog::_audio_changed() {
void AudioStreamImportSettingsDialog::_play() { void AudioStreamImportSettingsDialog::_play() {
if (_player->is_playing()) { 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' variable indicates that we want to pause the audio player, not stop it. See '_on_finished()'.
_pausing = true; _pausing = true;
_player->stop(); _player->stop();
_play_button->set_button_icon(get_editor_theme_icon(SNAME("MainPlay"))); _play_button->set_button_icon(get_editor_theme_icon(SNAME("MainPlay")));
set_process(false); set_process(false);
} else { } else {
_reset_master();
_player->play(_current); _player->play(_current);
_play_button->set_button_icon(get_editor_theme_icon(SNAME("Pause"))); _play_button->set_button_icon(get_editor_theme_icon(SNAME("Pause")));
set_process(true); set_process(true);
@ -250,6 +276,8 @@ void AudioStreamImportSettingsDialog::_play() {
} }
void AudioStreamImportSettingsDialog::_stop() { void AudioStreamImportSettingsDialog::_stop() {
_load_master_state();
_player->stop(); _player->stop();
_play_button->set_button_icon(get_editor_theme_icon(SNAME("MainPlay"))); _play_button->set_button_icon(get_editor_theme_icon(SNAME("MainPlay")));
_current = 0; _current = 0;

View file

@ -77,6 +77,15 @@ class AudioStreamImportSettingsDialog : public ConfirmationDialog {
String importer; String importer;
String path; 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(); void _audio_changed();
static AudioStreamImportSettingsDialog *singleton; static AudioStreamImportSettingsDialog *singleton;