summaryrefslogtreecommitdiff
path: root/src/audio/manager.cpp
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2023-08-21 21:20:25 -0400
committerouwou <26526779+ouwou@users.noreply.github.com>2023-08-21 21:20:25 -0400
commit2bc709bf3ff54b0104fb0bd8e8d80ffd1ba84586 (patch)
tree1dc30ebe132743acbb4a9a8fb90ae700b04aca02 /src/audio/manager.cpp
parent6dcc127c0a5078e4cbba329943489307cd8428a7 (diff)
downloadabaddon-portaudio-2bc709bf3ff54b0104fb0bd8e8d80ffd1ba84586.tar.gz
abaddon-portaudio-2bc709bf3ff54b0104fb0bd8e8d80ffd1ba84586.zip
fix denoise under gate vad, keep state always initd
Diffstat (limited to 'src/audio/manager.cpp')
-rw-r--r--src/audio/manager.cpp21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/audio/manager.cpp b/src/audio/manager.cpp
index 7b88c67..2113f05 100644
--- a/src/audio/manager.cpp
+++ b/src/audio/manager.cpp
@@ -64,6 +64,10 @@ void capture_data_callback(ma_device *pDevice, void *pOutput, const void *pInput
AudioManager::AudioManager() {
m_ok = true;
+#ifdef WITH_RNNOISE
+ RNNoiseInitialize();
+#endif
+
int err;
m_encoder = opus_encoder_create(48000, 2, OPUS_APPLICATION_VOIP, &err);
if (err != OPUS_OK) {
@@ -426,13 +430,20 @@ void AudioManager::OnCapturedPCM(const int16_t *pcm, ma_uint32 frames) {
static std::array<float, 480> denoised_L;
static std::array<float, 480> denoised_R;
+ bool m_rnnoise_passed = false;
+#ifdef WITH_RNNOISE
+ if (m_vad_method == VADMethod::RNNoise || m_enable_noise_suppression) {
+ m_rnnoise_passed = CheckVADRNNoise(new_pcm.data(), denoised_L.data(), denoised_R.data());
+ }
+#endif
+
switch (m_vad_method) {
case VADMethod::Gate:
if (!CheckVADVoiceGate()) return;
break;
#ifdef WITH_RNNOISE
case VADMethod::RNNoise:
- if (!CheckVADRNNoise(new_pcm.data(), denoised_L.data(), denoised_R.data())) return;
+ if (!m_rnnoise_passed) return;
break;
#endif
}
@@ -588,14 +599,6 @@ void AudioManager::SetVADMethod(const std::string &method) {
void AudioManager::SetVADMethod(VADMethod method) {
spdlog::get("audio")->debug("Setting VAD method to enum {}", static_cast<int>(method));
m_vad_method = method;
-
-#ifdef WITH_RNNOISE
- if (method == VADMethod::RNNoise) {
- RNNoiseInitialize();
- } else {
- RNNoiseUninitialize();
- }
-#endif
}
AudioManager::VADMethod AudioManager::GetVADMethod() const {