diff --git a/res/layouts/pages/settings_audio.xml.lua b/res/layouts/pages/settings_audio.xml.lua
index f0073098..eaa8b3fb 100644
--- a/res/layouts/pages/settings_audio.xml.lua
+++ b/res/layouts/pages/settings_audio.xml.lua
@@ -54,7 +54,7 @@ function on_open()
create_setting("audio.volume-music", "Music", 0.01)
document.root:add("")
document.root:add("")
+ "onselect='function(opt) core.set_setting(\"audio.input-device\", opt) end'/>")
document.root:add(""
..""
.."")
diff --git a/src/engine/Engine.cpp b/src/engine/Engine.cpp
index 67ff6797..4239531e 100644
--- a/src/engine/Engine.cpp
+++ b/src/engine/Engine.cpp
@@ -175,6 +175,10 @@ void Engine::initialize(CoreParameters coreParameters) {
langs::setup(lang, paths->resPaths.collectRoots());
}, true));
+ keepAlive(settings.audio.inputDevice.observe([](auto name) {
+ audio::set_input_device(name == "auto" ? "" : name);
+ }, true));
+
project->loadProjectStartScript();
if (!params.headless) {
project->loadProjectClientScript();
diff --git a/src/io/settings_io.cpp b/src/io/settings_io.cpp
index 6e94db9f..e0e423b0 100644
--- a/src/io/settings_io.cpp
+++ b/src/io/settings_io.cpp
@@ -43,6 +43,7 @@ SettingsHandler::SettingsHandler(EngineSettings& settings) {
builder.add("volume-ui", &settings.audio.volumeUI);
builder.add("volume-ambient", &settings.audio.volumeAmbient);
builder.add("volume-music", &settings.audio.volumeMusic);
+ builder.add("input-device", &settings.audio.inputDevice);
builder.section("display");
builder.add("width", &settings.display.width);
diff --git a/src/settings.hpp b/src/settings.hpp
index 9b3fa363..b47c47aa 100644
--- a/src/settings.hpp
+++ b/src/settings.hpp
@@ -16,6 +16,8 @@ struct AudioSettings {
NumberSetting volumeUI {1.0f, 0.0f, 1.0f, setting_format::percent};
NumberSetting volumeAmbient {1.0f, 0.0f, 1.0f, setting_format::percent};
NumberSetting volumeMusic {1.0f, 0.0f, 1.0f, setting_format::percent};
+
+ StringSetting inputDevice {"auto"};
};
struct DisplaySettings {