diff options
author | ouwou <26526779+ouwou@users.noreply.github.com> | 2022-10-24 22:10:50 -0400 |
---|---|---|
committer | ouwou <26526779+ouwou@users.noreply.github.com> | 2022-10-24 22:10:50 -0400 |
commit | cb690b6defde4851889d04a68efa4f06d7e38847 (patch) | |
tree | 8380a01c933579d948d577fc94e968aeabe35fb1 | |
parent | f751037717ee1f5592e437e2b91f4daa45239aae (diff) | |
download | abaddon-portaudio-cb690b6defde4851889d04a68efa4f06d7e38847.tar.gz abaddon-portaudio-cb690b6defde4851889d04a68efa4f06d7e38847.zip |
only enable microphone when in a voice channel
-rw-r--r-- | src/abaddon.cpp | 3 | ||||
-rw-r--r-- | src/audio/manager.cpp | 19 | ||||
-rw-r--r-- | src/audio/manager.hpp | 3 |
3 files changed, 18 insertions, 7 deletions
diff --git a/src/abaddon.cpp b/src/abaddon.cpp index 692526c..b39b854 100644 --- a/src/abaddon.cpp +++ b/src/abaddon.cpp @@ -427,6 +427,8 @@ void Abaddon::DiscordOnThreadUpdate(const ThreadUpdateData &data) { #ifdef WITH_VOICE void Abaddon::OnVoiceConnected() { + m_audio->StartCaptureDevice(); + auto *wnd = new VoiceWindow(m_discord.GetVoiceChannelID()); m_voice_window = wnd; @@ -473,6 +475,7 @@ void Abaddon::OnVoiceConnected() { } void Abaddon::OnVoiceDisconnected() { + m_audio->StopCaptureDevice(); m_audio->RemoveAllSSRCs(); if (m_voice_window != nullptr) { m_voice_window->close(); diff --git a/src/audio/manager.cpp b/src/audio/manager.cpp index 0461ee8..21c522e 100644 --- a/src/audio/manager.cpp +++ b/src/audio/manager.cpp @@ -98,13 +98,6 @@ AudioManager::AudioManager() { return; } - if (ma_device_start(&m_capture_device) != MA_SUCCESS) { - puts("failed to start capture"); - ma_device_uninit(&m_capture_device); - m_ok = false; - return; - } - char device_name[MA_MAX_DEVICE_NAME_LENGTH + 1]; ma_device_get_name(&m_capture_device, ma_device_type_capture, device_name, sizeof(device_name), nullptr); printf("using %s for capture\n", device_name); @@ -168,6 +161,18 @@ void AudioManager::FeedMeOpus(uint32_t ssrc, const std::vector<uint8_t> &data) { } } +void AudioManager::StartCaptureDevice() { + if (ma_device_start(&m_capture_device) != MA_SUCCESS) { + puts("failed to start capture"); + } +} + +void AudioManager::StopCaptureDevice() { + if (ma_device_stop(&m_capture_device) != MA_SUCCESS) { + puts("failed to stop capture"); + } +} + void AudioManager::SetCapture(bool capture) { m_should_capture = capture; } diff --git a/src/audio/manager.hpp b/src/audio/manager.hpp index 13dbfa4..7d8f479 100644 --- a/src/audio/manager.hpp +++ b/src/audio/manager.hpp @@ -27,6 +27,9 @@ public: void SetOpusBuffer(uint8_t *ptr); void FeedMeOpus(uint32_t ssrc, const std::vector<uint8_t> &data); + void StartCaptureDevice(); + void StopCaptureDevice(); + void SetCapture(bool capture); void SetPlayback(bool playback); |