Skip to content

Commit 97241ff

Browse files
committedMar 19, 2025··
Merge pull request godotengine#99555 from Meorge/mute-game
Add "Mute Game" toggle in Game view
2 parents 5bb1a2c + 6858607 commit 97241ff

12 files changed

+108
-0
lines changed
 

‎editor/debugger/editor_debugger_node.cpp

+11
Original file line numberDiff line numberDiff line change
@@ -871,6 +871,17 @@ void EditorDebuggerNode::live_debug_reparent_node(const NodePath &p_at, const No
871871
});
872872
}
873873

874+
void EditorDebuggerNode::set_debug_mute_audio(bool p_mute) {
875+
_for_all(tabs, [&](ScriptEditorDebugger *dbg) {
876+
dbg->set_debug_mute_audio(p_mute);
877+
});
878+
debug_mute_audio = p_mute;
879+
}
880+
881+
bool EditorDebuggerNode::get_debug_mute_audio() const {
882+
return debug_mute_audio;
883+
}
884+
874885
void EditorDebuggerNode::set_camera_override(CameraOverride p_override) {
875886
_for_all(tabs, [&](ScriptEditorDebugger *dbg) {
876887
dbg->set_camera_override(p_override);

‎editor/debugger/editor_debugger_node.h

+5
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,8 @@ class EditorDebuggerNode : public MarginContainer {
113113
bool keep_open = false;
114114
String current_uri;
115115

116+
bool debug_mute_audio = false;
117+
116118
CameraOverride camera_override = OVERRIDE_NONE;
117119
HashMap<Breakpoint, bool, Breakpoint> breakpoints;
118120

@@ -214,6 +216,9 @@ class EditorDebuggerNode : public MarginContainer {
214216
void live_debug_duplicate_node(const NodePath &p_at, const String &p_new_name);
215217
void live_debug_reparent_node(const NodePath &p_at, const NodePath &p_new_place, const String &p_new_name, int p_at_pos);
216218

219+
void set_debug_mute_audio(bool p_mute);
220+
bool get_debug_mute_audio() const;
221+
217222
void set_camera_override(CameraOverride p_override);
218223
CameraOverride get_camera_override();
219224

‎editor/debugger/script_editor_debugger.cpp

+11
Original file line numberDiff line numberDiff line change
@@ -1543,6 +1543,17 @@ void ScriptEditorDebugger::live_debug_reparent_node(const NodePath &p_at, const
15431543
}
15441544
}
15451545

1546+
bool ScriptEditorDebugger::get_debug_mute_audio() const {
1547+
return debug_mute_audio;
1548+
}
1549+
1550+
void ScriptEditorDebugger::set_debug_mute_audio(bool p_mute) {
1551+
Array msg;
1552+
msg.push_back(p_mute);
1553+
_put_msg("scene:debug_mute_audio", msg);
1554+
debug_mute_audio = p_mute;
1555+
}
1556+
15461557
CameraOverride ScriptEditorDebugger::get_camera_override() const {
15471558
return camera_override;
15481559
}

‎editor/debugger/script_editor_debugger.h

+5
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,8 @@ class ScriptEditorDebugger : public MarginContainer {
183183

184184
void _select_thread(int p_index);
185185

186+
bool debug_mute_audio = false;
187+
186188
EditorDebuggerNode::CameraOverride camera_override;
187189

188190
void _stack_dump_frame_selected();
@@ -303,6 +305,9 @@ class ScriptEditorDebugger : public MarginContainer {
303305
void live_debug_duplicate_node(const NodePath &p_at, const String &p_new_name);
304306
void live_debug_reparent_node(const NodePath &p_at, const NodePath &p_new_place, const String &p_new_name, int p_at_pos);
305307

308+
bool get_debug_mute_audio() const;
309+
void set_debug_mute_audio(bool p_mute);
310+
306311
EditorDebuggerNode::CameraOverride get_camera_override() const;
307312
void set_camera_override(EditorDebuggerNode::CameraOverride p_override);
308313

‎editor/editor_run.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ Error EditorRun::run(const String &p_scene, const String &p_write_movie, const V
7373
bool debug_navigation = EditorSettings::get_singleton()->get_project_metadata("debug_options", "run_debug_navigation", false);
7474
bool debug_avoidance = EditorSettings::get_singleton()->get_project_metadata("debug_options", "run_debug_avoidance", false);
7575
bool debug_canvas_redraw = EditorSettings::get_singleton()->get_project_metadata("debug_options", "run_debug_canvas_redraw", false);
76+
bool debug_mute_audio = EditorDebuggerNode::get_singleton()->get_debug_mute_audio();
7677

7778
if (debug_collisions) {
7879
args.push_back("--debug-collisions");
@@ -94,6 +95,10 @@ Error EditorRun::run(const String &p_scene, const String &p_write_movie, const V
9495
args.push_back("--debug-canvas-item-redraw");
9596
}
9697

98+
if (debug_mute_audio) {
99+
args.push_back("--debug-mute-audio");
100+
}
101+
97102
if (p_write_movie != "") {
98103
args.push_back("--write-movie");
99104
args.push_back(p_write_movie);

‎editor/icons/AudioMute.svg

+1
Loading

‎editor/plugins/game_view_plugin.cpp

+25
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,9 @@ void GameViewDebugger::_session_started(Ref<EditorDebuggerSession> p_session) {
9595
Array mode;
9696
mode.append(select_mode);
9797
p_session->send_message("scene:runtime_node_select_set_mode", mode);
98+
Array mute_audio_data;
99+
mute_audio_data.append(mute_audio);
100+
p_session->send_message("scene:debug_mute_audio", mute_audio_data);
98101

99102
emit_signal(SNAME("session_started"));
100103
}
@@ -169,6 +172,11 @@ void GameViewDebugger::set_select_mode(int p_mode) {
169172
}
170173
}
171174

175+
void GameViewDebugger::set_debug_mute_audio(bool p_enabled) {
176+
mute_audio = p_enabled;
177+
EditorDebuggerNode::get_singleton()->set_debug_mute_audio(p_enabled);
178+
}
179+
172180
void GameViewDebugger::set_camera_override(bool p_enabled) {
173181
EditorDebuggerNode::get_singleton()->set_camera_override(p_enabled ? camera_override_mode : EditorDebuggerNode::OVERRIDE_NONE);
174182
}
@@ -593,6 +601,13 @@ void GameView::_hide_selection_toggled(bool p_pressed) {
593601
EditorSettings::get_singleton()->set_project_metadata("game_view", "hide_selection", p_pressed);
594602
}
595603

604+
void GameView::_debug_mute_audio_button_pressed() {
605+
debug_mute_audio = !debug_mute_audio;
606+
debug_mute_audio_button->set_button_icon(get_editor_theme_icon(debug_mute_audio ? SNAME("AudioMute") : SNAME("AudioStreamPlayer")));
607+
debug_mute_audio_button->set_tooltip_text(debug_mute_audio ? TTRC("Unmute game audio.") : TTRC("Mute game audio."));
608+
debugger->set_debug_mute_audio(debug_mute_audio);
609+
}
610+
596611
void GameView::_camera_override_button_toggled(bool p_pressed) {
597612
_update_debugger_buttons();
598613

@@ -654,6 +669,8 @@ void GameView::_notification(int p_what) {
654669
stretch_button->set_button_icon(get_editor_theme_icon(SNAME("Stretch")));
655670
embed_options_menu->set_button_icon(get_editor_theme_icon(SNAME("GuiTabMenuHl")));
656671

672+
debug_mute_audio_button->set_button_icon(get_editor_theme_icon(debug_mute_audio ? SNAME("AudioMute") : SNAME("AudioStreamPlayer")));
673+
657674
camera_override_button->set_button_icon(get_editor_theme_icon(SNAME("Camera")));
658675
camera_override_menu->set_button_icon(get_editor_theme_icon(SNAME("GuiTabMenuHl")));
659676
} break;
@@ -963,6 +980,14 @@ GameView::GameView(Ref<GameViewDebugger> p_debugger, WindowWrapper *p_wrapper) {
963980

964981
main_menu_hbox->add_child(memnew(VSeparator));
965982

983+
debug_mute_audio_button = memnew(Button);
984+
main_menu_hbox->add_child(debug_mute_audio_button);
985+
debug_mute_audio_button->set_theme_type_variation("FlatButton");
986+
debug_mute_audio_button->connect(SceneStringName(pressed), callable_mp(this, &GameView::_debug_mute_audio_button_pressed));
987+
debug_mute_audio_button->set_tooltip_text(debug_mute_audio ? TTRC("Unmute game audio.") : TTRC("Mute game audio."));
988+
989+
main_menu_hbox->add_child(memnew(VSeparator));
990+
966991
camera_override_button = memnew(Button);
967992
main_menu_hbox->add_child(camera_override_button);
968993
camera_override_button->set_toggle_mode(true);

‎editor/plugins/game_view_plugin.h

+9
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ class GameViewDebugger : public EditorDebuggerPlugin {
5252
int node_type = RuntimeNodeSelect::NODE_TYPE_NONE;
5353
bool selection_visible = true;
5454
int select_mode = RuntimeNodeSelect::SELECT_MODE_SINGLE;
55+
bool mute_audio = false;
5556
EditorDebuggerNode::CameraOverride camera_override_mode = EditorDebuggerNode::OVERRIDE_INGAME;
5657

5758
void _session_started(Ref<EditorDebuggerSession> p_session);
@@ -71,6 +72,8 @@ class GameViewDebugger : public EditorDebuggerPlugin {
7172

7273
void set_selection_visible(bool p_visible);
7374

75+
void set_debug_mute_audio(bool p_enabled);
76+
7477
void set_camera_override(bool p_enabled);
7578
void set_camera_manipulate_mode(EditorDebuggerNode::CameraOverride p_mode);
7679

@@ -127,6 +130,8 @@ class GameView : public VBoxContainer {
127130
Rect2i floating_window_rect;
128131
int floating_window_screen = -1;
129132

133+
bool debug_mute_audio = false;
134+
130135
Button *suspend_button = nullptr;
131136
Button *next_frame_button = nullptr;
132137

@@ -135,6 +140,8 @@ class GameView : public VBoxContainer {
135140

136141
Button *hide_selection = nullptr;
137142

143+
Button *debug_mute_audio_button = nullptr;
144+
138145
Button *camera_override_button = nullptr;
139146
MenuButton *camera_override_menu = nullptr;
140147

@@ -178,6 +185,8 @@ class GameView : public VBoxContainer {
178185

179186
void _hide_selection_toggled(bool p_pressed);
180187

188+
void _debug_mute_audio_button_pressed();
189+
181190
void _camera_override_button_toggled(bool p_pressed);
182191
void _camera_override_menu_id_pressed(int p_id);
183192

‎main/main.cpp

+7
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,7 @@ static bool debug_paths = false;
246246
static bool debug_navigation = false;
247247
static bool debug_avoidance = false;
248248
static bool debug_canvas_item_redraw = false;
249+
static bool debug_mute_audio = false;
249250
#endif
250251
static int max_fps = -1;
251252
static int frame_delay = 0;
@@ -1678,6 +1679,8 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
16781679
debug_canvas_item_redraw = true;
16791680
} else if (arg == "--debug-stringnames") {
16801681
StringName::set_debug_stringnames(true);
1682+
} else if (arg == "--debug-mute-audio") {
1683+
debug_mute_audio = true;
16811684
#endif
16821685
#if defined(TOOLS_ENABLED) && (defined(WINDOWS_ENABLED) || defined(LINUXBSD_ENABLED))
16831686
} else if (arg == "--test-rd-support") {
@@ -4084,6 +4087,10 @@ int Main::start() {
40844087
if (debug_canvas_item_redraw) {
40854088
RenderingServer::get_singleton()->canvas_item_set_debug_redraw(true);
40864089
}
4090+
4091+
if (debug_mute_audio) {
4092+
AudioServer::get_singleton()->set_debug_mute(true);
4093+
}
40874094
#endif
40884095

40894096
if (single_threaded_scene) {

‎scene/debugger/scene_debugger.cpp

+6
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
#include "scene/main/window.h"
5353
#include "scene/resources/packed_scene.h"
5454
#include "scene/theme/theme_db.h"
55+
#include "servers/audio_server.h"
5556

5657
SceneDebugger::SceneDebugger() {
5758
singleton = this;
@@ -150,6 +151,11 @@ Error SceneDebugger::parse_message(void *p_user, const String &p_msg, const Arra
150151
} else if (p_msg == "next_frame") {
151152
_next_frame();
152153

154+
} else if (p_msg == "debug_mute_audio") { // Enable/disable audio.
155+
ERR_FAIL_COND_V(p_args.is_empty(), ERR_INVALID_DATA);
156+
bool do_mute = p_args[0];
157+
AudioServer::get_singleton()->set_debug_mute(do_mute);
158+
153159
} else if (p_msg == "override_cameras") { /// Camera
154160
ERR_FAIL_COND_V(p_args.is_empty(), ERR_INVALID_DATA);
155161
bool enable = p_args[0];

‎servers/audio_server.cpp

+14
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,11 @@ void AudioServer::_driver_process(int p_frames, int32_t *p_buffer) {
294294
// The destination start for data will be the same in all cases.
295295
int32_t *dest = &p_buffer[from_buf * (cs * 2) + (k * 2)];
296296

297+
#ifdef DEBUG_ENABLED
298+
if (!debug_mute && master->channels[k].active) {
299+
#else
297300
if (master->channels[k].active) {
301+
#endif // DEBUG_ENABLED
298302
const AudioFrame *buf = master->channels[k].buffer.ptr();
299303

300304
for (int j = 0; j < to_copy; j++) {
@@ -765,6 +769,16 @@ int AudioServer::thread_find_bus_index(const StringName &p_name) {
765769
}
766770
}
767771

772+
#ifdef DEBUG_ENABLED
773+
void AudioServer::set_debug_mute(bool p_mute) {
774+
debug_mute = p_mute;
775+
}
776+
777+
bool AudioServer::get_debug_mute() const {
778+
return debug_mute;
779+
}
780+
#endif // DEBUG_ENABLED
781+
768782
void AudioServer::set_bus_count(int p_count) {
769783
ERR_FAIL_COND(p_count < 1);
770784
ERR_FAIL_INDEX(p_count, 256);

‎servers/audio_server.h

+9
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,10 @@ class AudioServer : public Object {
228228

229229
bool tag_used_audio_streams = false;
230230

231+
#ifdef DEBUG_ENABLED
232+
bool debug_mute = false;
233+
#endif // DEBUG_ENABLED
234+
231235
struct Bus {
232236
StringName name;
233237
bool solo = false;
@@ -366,6 +370,11 @@ class AudioServer : public Object {
366370
int thread_get_mix_buffer_size() const;
367371
int thread_find_bus_index(const StringName &p_name);
368372

373+
#ifdef DEBUG_ENABLED
374+
void set_debug_mute(bool p_mute);
375+
bool get_debug_mute() const;
376+
#endif // DEBUG_ENABLED
377+
369378
void set_bus_count(int p_count);
370379
int get_bus_count() const;
371380

0 commit comments

Comments
 (0)
Please sign in to comment.