diff options
Diffstat (limited to 'src/audio')
-rw-r--r-- | src/audio/manager.cpp | 3 | ||||
-rw-r--r-- | src/audio/manager.hpp | 4 |
2 files changed, 7 insertions, 0 deletions
diff --git a/src/audio/manager.cpp b/src/audio/manager.cpp index 53eff54..4f3555b 100644 --- a/src/audio/manager.cpp +++ b/src/audio/manager.cpp @@ -487,6 +487,7 @@ bool AudioManager::CheckVADRNNoise(const int16_t *pcm) { for (size_t i = 0; i < 480; i++) { rnnoise_input[i] = static_cast<float>(pcm[i * 2]); } + std::unique_lock<std::mutex> _(m_rnn_mutex); m_vad_prob = rnnoise_process_frame(m_rnnoise, denoised, rnnoise_input); return m_vad_prob > m_prob_threshold; } @@ -494,6 +495,7 @@ bool AudioManager::CheckVADRNNoise(const int16_t *pcm) { void AudioManager::RNNoiseInitialize() { spdlog::get("audio")->debug("Initializing RNNoise"); RNNoiseUninitialize(); + std::unique_lock<std::mutex> _(m_rnn_mutex); m_rnnoise = rnnoise_create(nullptr); const auto expected = rnnoise_get_frame_size(); if (expected != 480) { @@ -504,6 +506,7 @@ void AudioManager::RNNoiseInitialize() { void AudioManager::RNNoiseUninitialize() { if (m_rnnoise != nullptr) { spdlog::get("audio")->debug("Uninitializing RNNoise"); + std::unique_lock<std::mutex> _(m_rnn_mutex); rnnoise_destroy(m_rnnoise); m_rnnoise = nullptr; } diff --git a/src/audio/manager.hpp b/src/audio/manager.hpp index dac9738..6b67719 100644 --- a/src/audio/manager.hpp +++ b/src/audio/manager.hpp @@ -121,6 +121,10 @@ private: mutable std::mutex m_mutex; mutable std::mutex m_enc_mutex; +#ifdef WITH_RNNOISE + mutable std::mutex m_rnn_mutex; +#endif + std::unordered_map<uint32_t, std::pair<std::deque<int16_t>, OpusDecoder *>> m_sources; OpusEncoder *m_encoder; |