diff --git a/src/audio.cpp b/src/audio.cpp index b24ae613..d2d55780 100644 --- a/src/audio.cpp +++ b/src/audio.cpp @@ -192,6 +192,8 @@ namespace audio { } } + BOOST_LOG(info) << "Selected audio sink: "sv << *sink; + // Only the first to start a session may change the default sink if (!ref->sink_flag->exchange(true, std::memory_order_acquire)) { // If the selected sink is different than the current one, change sinks. @@ -238,14 +240,17 @@ namespace audio { case platf::capture_e::timeout: continue; case platf::capture_e::reinit: - BOOST_LOG(info) << "Reinitializing audio capture"sv; - mic.reset(); - do { - mic = control->microphone(stream.mapping, stream.channelCount, stream.sampleRate, frame_size); - if (!mic) { - BOOST_LOG(warning) << "Couldn't re-initialize audio input"sv; - } - } while (!mic && !shutdown_event->view(5s)); + if (config::audio.auto_capture) { + BOOST_LOG(info) << "Reinitializing audio capture"sv; + mic.reset(); + do { + mic = control->microphone(stream.mapping, stream.channelCount, stream.sampleRate, frame_size); + if (!mic) { + BOOST_LOG(warning) << "Couldn't re-initialize audio input"sv; + } + } while (!mic && !shutdown_event->view(5s)); + } + continue; default: return; diff --git a/src/config.cpp b/src/config.cpp index 7f588863..6bfeeb8a 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -384,6 +384,8 @@ namespace config { {}, // audio_sink {}, // virtual_sink true, // install_steam_drivers + true, // keep_sink_default + true, // auto_capture }; stream_t stream { @@ -1051,6 +1053,8 @@ namespace config { string_f(vars, "audio_sink", audio.sink); string_f(vars, "virtual_sink", audio.virtual_sink); bool_f(vars, "install_steam_audio_drivers", audio.install_steam_drivers); + bool_f(vars, "keep_sink_default", audio.keep_default); + bool_f(vars, "auto_capture_sink", audio.auto_capture); string_restricted_f(vars, "origin_web_ui_allowed", nvhttp.origin_web_ui_allowed, { "pc"sv, "lan"sv, "wan"sv }); diff --git a/src/config.h b/src/config.h index d2c4783c..ef72509b 100644 --- a/src/config.h +++ b/src/config.h @@ -81,6 +81,8 @@ namespace config { std::string sink; std::string virtual_sink; bool install_steam_drivers; + bool keep_default; + bool auto_capture; }; constexpr int ENCRYPTION_MODE_NEVER = 0; // Never use video encryption, even if the client supports it diff --git a/src/platform/windows/audio.cpp b/src/platform/windows/audio.cpp index bc208128..13a504f7 100644 --- a/src/platform/windows/audio.cpp +++ b/src/platform/windows/audio.cpp @@ -758,13 +758,15 @@ namespace platf::audio { return nullptr; } - // If this is a virtual sink, set a callback that will change the sink back if it's changed - auto virtual_sink_info = extract_virtual_sink_info(assigned_sink); - if (virtual_sink_info) { - mic->default_endpt_changed_cb = [this] { - BOOST_LOG(info) << "Resetting sink to ["sv << assigned_sink << "] after default changed"; - set_sink(assigned_sink); - }; + if (config::audio.keep_default) { + // If this is a virtual sink, set a callback that will change the sink back if it's changed + auto virtual_sink_info = extract_virtual_sink_info(assigned_sink); + if (virtual_sink_info) { + mic->default_endpt_changed_cb = [this] { + BOOST_LOG(info) << "Resetting sink to ["sv << assigned_sink << "] after default changed"; + set_sink(assigned_sink); + }; + } } return mic; diff --git a/src_assets/common/assets/web/config.html b/src_assets/common/assets/web/config.html index 8c2bce2b..29ef50b3 100644 --- a/src_assets/common/assets/web/config.html +++ b/src_assets/common/assets/web/config.html @@ -10,6 +10,10 @@ border-top: none; } + .pre-wrap { + white-space: pre-wrap; + } + .buttons { padding: 1em 0; } @@ -172,6 +176,8 @@ "audio_sink": "", "virtual_sink": "", "install_steam_audio_drivers": "enabled", + "keep_sink_default": "enabled", + "auto_capture_sink": "enabled", "adapter_name": "", "output_name": "", "resolutions": "[352x240,480x360,858x480,1280x720,1920x1080,2560x1080,2560x1440,3440x1440,1920x1200,3840x2160,3840x1600]", diff --git a/src_assets/common/assets/web/configs/tabs/AudioVideo.vue b/src_assets/common/assets/web/configs/tabs/AudioVideo.vue index 1a5b63c0..e188055a 100644 --- a/src_assets/common/assets/web/configs/tabs/AudioVideo.vue +++ b/src_assets/common/assets/web/configs/tabs/AudioVideo.vue @@ -27,7 +27,7 @@ const config = ref(props.config) -