summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/abaddon.cpp3
-rw-r--r--src/audio/manager.cpp38
-rw-r--r--src/audio/manager.hpp4
-rw-r--r--src/settings.cpp1
-rw-r--r--src/settings.hpp1
5 files changed, 43 insertions, 4 deletions
diff --git a/src/abaddon.cpp b/src/abaddon.cpp
index 456749a..f8c4b39 100644
--- a/src/abaddon.cpp
+++ b/src/abaddon.cpp
@@ -53,7 +53,8 @@ void macOSThemeChangedCallback(CFNotificationCenterRef center, void *observer, C
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;