From b7258e858bb88337959c84e55ef27fb9fa7c592f Mon Sep 17 00:00:00 2001 From: betalars Date: Fri, 9 May 2025 17:34:45 +0200 Subject: [PATCH] add force stereo option to avoid audio getting lost in misconfigured surround setup --- src/dev-util/stereo-switch.gd | 11 +++++++++++ src/dev-util/stereo-switch.gd.uid | 1 + src/logic-scenes/main menu/audio_settings.gd | 4 ++++ src/logic-scenes/main menu/audio_settings.tscn | 6 ++++++ src/singletons/global_state.gd | 12 +++++++++++- 5 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 src/dev-util/stereo-switch.gd create mode 100644 src/dev-util/stereo-switch.gd.uid diff --git a/src/dev-util/stereo-switch.gd b/src/dev-util/stereo-switch.gd new file mode 100644 index 0000000..cb1eb99 --- /dev/null +++ b/src/dev-util/stereo-switch.gd @@ -0,0 +1,11 @@ +class_name StereoSwitch extends AudioStreamPlayer + +func _ready() -> void: + State.settings_changed.connect(update_mix_target) + update_mix_target() + +func update_mix_target(): + if State.force_stereo: + mix_target = AudioStreamPlayer.MIX_TARGET_STEREO + else: + mix_target = AudioStreamPlayer.MIX_TARGET_CENTER diff --git a/src/dev-util/stereo-switch.gd.uid b/src/dev-util/stereo-switch.gd.uid new file mode 100644 index 0000000..4999b51 --- /dev/null +++ b/src/dev-util/stereo-switch.gd.uid @@ -0,0 +1 @@ +uid://c1oub0cs7cph6 diff --git a/src/logic-scenes/main menu/audio_settings.gd b/src/logic-scenes/main menu/audio_settings.gd index a2f354a..24ba257 100644 --- a/src/logic-scenes/main menu/audio_settings.gd +++ b/src/logic-scenes/main menu/audio_settings.gd @@ -22,6 +22,7 @@ var current_music_decay:float = 0 @onready var sum_slider: Range = %SumSlider @onready var text_lang_selector: OptionButton = %InterfaceSelector @onready var speech_lang_selector: OptionButton = %SpeechSelector +@onready var force_stereo_switch: CheckBox = %ForceStereoCheck func _process(delta: float) -> void: if current_music_decay > 0: @@ -54,6 +55,8 @@ func _ready() -> void: %ResetButton.pressed.connect(_on_reset_button_pressed) %SaveButton.pressed.connect(_on_exit_button_pressed) + + force_stereo_switch.pressed.connect(func(value): State.force_stereo = value) func _on_reset_button_pressed(): @@ -73,6 +76,7 @@ func update_ui_from_state(): sum_slider.value = State.main_volume text_lang_selector.select(State.text_language) speech_lang_selector.select(State.speech_language) + force_stereo_switch.button_pressed = State.force_stereo func _on_exit_button_pressed() -> void: leave_stage.emit() diff --git a/src/logic-scenes/main menu/audio_settings.tscn b/src/logic-scenes/main menu/audio_settings.tscn index 160cc53..4f81993 100644 --- a/src/logic-scenes/main menu/audio_settings.tscn +++ b/src/logic-scenes/main menu/audio_settings.tscn @@ -161,6 +161,12 @@ max_value = 1.0 step = 0.05 value = 0.5 +[node name="ForceStereoCheck" type="CheckBox" parent="."] +unique_name_in_owner = true +layout_mode = 2 +tooltip_text = "This setting disables the surround center channel. May resolve you not hearing speech when your Operating Sustem has a misconfigured surround setup." +text = "Headphone-Mode (may fix missing speech)" + [node name="I18nLabel" type="Label" parent="."] layout_mode = 2 theme_type_variation = &"HeaderMedium" diff --git a/src/singletons/global_state.gd b/src/singletons/global_state.gd index c5d4e31..45ad0a9 100644 --- a/src/singletons/global_state.gd +++ b/src/singletons/global_state.gd @@ -99,6 +99,15 @@ var current_main_theme:Theme = preload("res://logic-scenes/themes/handwriting.th set(volume): speech_volume = volume AudioServer.set_bus_volume_db(AudioServer.get_bus_index("text"), linear_to_db(volume)) +@export var force_stereo: bool = false: + set(stereo): + if stereo != force_stereo: + force_stereo = stereo + settings_changed.emit() +@export var disconnect_steam:bool = false +@export var obscure_logs:bool = true + + @export_enum("system_locale", "english", "german") var text_language: int = -1: set(value): text_language = value @@ -172,7 +181,8 @@ func save_settings(): "sfx_volume": sfx_volume, "music_muted": music_muted, "music_volume": music_volume, - "speech_volume": speech_volume + "speech_volume": speech_volume, + "force_stereo": force_stereo }, "gameplay": { "input_sensitivity": input_sensitivity,