diff options
author | ouwou <26526779+ouwou@users.noreply.github.com> | 2023-05-28 02:13:36 -0400 |
---|---|---|
committer | ouwou <26526779+ouwou@users.noreply.github.com> | 2023-05-28 02:13:36 -0400 |
commit | 5a902f862c92206092d558a401e6e6ad3813cc31 (patch) | |
tree | 59564df67806bf6f246df8fd212844799a17f59f /src | |
parent | 7f021a78522c53ce122ad38a57f541c9ff2e7839 (diff) | |
download | abaddon-portaudio-5a902f862c92206092d558a401e6e6ad3813cc31.tar.gz abaddon-portaudio-5a902f862c92206092d558a401e6e6ad3813cc31.zip |
initial rnnoise test
Diffstat (limited to 'src')
-rw-r--r-- | src/audio/manager.cpp | 13 | ||||
-rw-r--r-- | src/audio/manager.hpp | 4 |
2 files changed, 16 insertions, 1 deletions
diff --git a/src/audio/manager.cpp b/src/audio/manager.cpp index 6e85ed8..9aacd29 100644 --- a/src/audio/manager.cpp +++ b/src/audio/manager.cpp @@ -55,6 +55,9 @@ void capture_data_callback(ma_device *pDevice, void *pOutput, const void *pInput AudioManager::AudioManager() { m_ok = true; + m_rnnoise = rnnoise_create(nullptr); + spdlog::get("audio")->info("RNNoise expects {} frames", rnnoise_get_frame_size()); + int err; m_encoder = opus_encoder_create(48000, 2, OPUS_APPLICATION_VOIP, &err); if (err != OPUS_OK) { @@ -134,6 +137,7 @@ AudioManager::~AudioManager() { ma_device_uninit(&m_capture_device); ma_context_uninit(&m_context); RemoveAllSSRCs(); + rnnoise_destroy(m_rnnoise); } void AudioManager::AddSSRC(uint32_t ssrc) { @@ -410,7 +414,14 @@ void AudioManager::OnCapturedPCM(const int16_t *pcm, ma_uint32 frames) { UpdateCaptureVolume(new_pcm.data(), frames); - if (m_capture_peak_meter / 32768.0 < m_capture_gate) return; + static float idc[480]; + static float rnnoise_input[480]; + // take left channel + for (int i = 0; i < 480; i++) { + rnnoise_input[i] = static_cast<float>(pcm[i * 2]); + } + float prob = rnnoise_process_frame(m_rnnoise, idc, rnnoise_input); + if (prob < m_capture_gate) return; m_enc_mutex.lock(); int payload_len = opus_encode(m_encoder, new_pcm.data(), 480, static_cast<unsigned char *>(m_opus_buffer), 1275); diff --git a/src/audio/manager.hpp b/src/audio/manager.hpp index 9cd7f42..28d6d74 100644 --- a/src/audio/manager.hpp +++ b/src/audio/manager.hpp @@ -14,6 +14,8 @@ #include <miniaudio.h> #include <opus.h> #include <sigc++/sigc++.h> +#include <rnnoise.h> + #include "devices.hpp" // clang-format on @@ -113,6 +115,8 @@ private: AudioDevices m_devices; + DenoiseState *m_rnnoise; + public: using type_signal_opus_packet = sigc::signal<void(int payload_size)>; type_signal_opus_packet signal_opus_packet(); |