diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/abaddon.cpp | 3 | ||||
-rw-r--r-- | src/audio/manager.cpp | 38 | ||||
-rw-r--r-- | src/audio/manager.hpp | 4 | ||||
-rw-r--r-- | src/settings.cpp | 1 | ||||
-rw-r--r-- | src/settings.hpp | 1 |
5 files changed, 43 insertions, 4 deletions
diff --git a/src/abaddon.cpp b/src/abaddon.cpp index 443fa4e..26e33f3 100644 --- a/src/abaddon.cpp +++ b/src/abaddon.cpp @@ -36,7 +36,8 @@ Abaddon::Abaddon() : m_settings(Platform::FindConfigFile()) , m_discord(GetSettings().UseMemoryDB) // stupid but easy - , m_emojis(GetResPath("/emojis.bin")) { + , m_emojis(GetResPath("/emojis.bin")) + , m_audio(GetSettings().Backends) { LoadFromSettings(); // todo: set user agent for non-client(?) diff --git a/src/audio/manager.cpp b/src/audio/manager.cpp index 8f2a5a3..eaac3bf 100644 --- a/src/audio/manager.cpp +++ b/src/audio/manager.cpp @@ -85,7 +85,7 @@ void mgr_log_callback(void *pUserData, ma_uint32 level, const char *pMessage) { g_free(msg); } -AudioManager::AudioManager() +AudioManager::AudioManager(const Glib::ustring &backends_string) : m_log(spdlog::stdout_color_mt("miniaudio")) { m_ok = true; @@ -107,7 +107,19 @@ AudioManager::AudioManager() auto ctx_cfg = ma_context_config_init(); ctx_cfg.pLog = &m_ma_log; - if (ma_context_init(nullptr, 0, &ctx_cfg, &m_context) != MA_SUCCESS) { + + ma_backend *pBackends = nullptr; + ma_uint32 backendCount = 0; + + std::vector<ma_backend> backends_vec; + if (!backends_string.empty()) { + spdlog::get("audio")->debug("Using backends list: {}", std::string(backends_string)); + backends_vec = ParseBackendsList(backends_string); + pBackends = backends_vec.data(); + backendCount = static_cast<ma_uint32>(backends_vec.size()); + } + + if (ma_context_init(pBackends, backendCount, &ctx_cfg, &m_context) != MA_SUCCESS) { spdlog::get("audio")->error("failed to initialize context"); m_ok = false; return; @@ -647,6 +659,28 @@ AudioManager::VADMethod AudioManager::GetVADMethod() const { return m_vad_method; } +std::vector<ma_backend> AudioManager::ParseBackendsList(const Glib::ustring &list) { + auto regex = Glib::Regex::create(";"); + const std::vector<Glib::ustring> split = regex->split(list); + + std::vector<ma_backend> backends; + for (const auto &s : split) { + if (s == "wasapi") backends.push_back(ma_backend_wasapi); + else if (s == "dsound") backends.push_back(ma_backend_dsound); + else if (s == "winmm") backends.push_back(ma_backend_winmm); + else if (s == "coreaudio") backends.push_back(ma_backend_coreaudio); + else if (s == "sndio") backends.push_back(ma_backend_sndio); + else if (s == "audio4") backends.push_back(ma_backend_audio4); + else if (s == "oss") backends.push_back(ma_backend_oss); + else if (s == "pulseaudio") backends.push_back(ma_backend_pulseaudio); + else if (s == "alsa") backends.push_back(ma_backend_alsa); + else if (s == "jack") backends.push_back(ma_backend_jack); + } + backends.push_back(ma_backend_null); + + return backends; +} + #ifdef WITH_RNNOISE float AudioManager::GetCurrentVADProbability() const { return m_vad_prob; diff --git a/src/audio/manager.hpp b/src/audio/manager.hpp index f5b433f..5716fc5 100644 --- a/src/audio/manager.hpp +++ b/src/audio/manager.hpp @@ -25,7 +25,7 @@ class AudioManager { public: - AudioManager(); + AudioManager(const Glib::ustring &backends_string); ~AudioManager(); void AddSSRC(uint32_t ssrc); @@ -80,6 +80,8 @@ public: void SetVADMethod(VADMethod method); VADMethod GetVADMethod() const; + static std::vector<ma_backend> ParseBackendsList(const Glib::ustring &list); + #ifdef WITH_RNNOISE float GetCurrentVADProbability() const; double GetRNNProbThreshold() const; diff --git a/src/settings.cpp b/src/settings.cpp index 0a08c8b..7821364 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -126,6 +126,7 @@ void SettingsManager::DefineSettings() { #else AddSetting("voice", "vad", "gate"s, &Settings::VAD); #endif + AddSetting("voice", "backends", ""s, &Settings::Backends); } void SettingsManager::ReadSettings() { diff --git a/src/settings.hpp b/src/settings.hpp index d69d165..72b2682 100644 --- a/src/settings.hpp +++ b/src/settings.hpp @@ -48,6 +48,7 @@ public: // [voice] std::string VAD; + std::string Backends; // [windows] bool HideConsole; |