diff options
Diffstat (limited to 'src/audio/manager.hpp')
-rw-r--r-- | src/audio/manager.hpp | 54 |
1 files changed, 43 insertions, 11 deletions
diff --git a/src/audio/manager.hpp b/src/audio/manager.hpp index ed40f35..dac9738 100644 --- a/src/audio/manager.hpp +++ b/src/audio/manager.hpp @@ -14,6 +14,11 @@ #include <miniaudio.h> #include <opus.h> #include <sigc++/sigc++.h> + +#ifdef WITH_RNNOISE +#include <rnnoise.h> +#endif + #include "devices.hpp" // clang-format on @@ -40,30 +45,42 @@ public: void SetCaptureGate(double gate); void SetCaptureGain(double gain); - [[nodiscard]] double GetCaptureGate() const noexcept; - [[nodiscard]] double GetCaptureGain() const noexcept; + double GetCaptureGate() const noexcept; + double GetCaptureGain() const noexcept; void SetMuteSSRC(uint32_t ssrc, bool mute); void SetVolumeSSRC(uint32_t ssrc, double volume); - [[nodiscard]] double GetVolumeSSRC(uint32_t ssrc) const; + double GetVolumeSSRC(uint32_t ssrc) const; void SetEncodingApplication(int application); - [[nodiscard]] int GetEncodingApplication(); + int GetEncodingApplication(); void SetSignalHint(int signal); - [[nodiscard]] int GetSignalHint(); + int GetSignalHint(); void SetBitrate(int bitrate); - [[nodiscard]] int GetBitrate(); + int GetBitrate(); void Enumerate(); - [[nodiscard]] bool OK() const; + bool OK() const; + + double GetCaptureVolumeLevel() const noexcept; + double GetSSRCVolumeLevel(uint32_t ssrc) const noexcept; + + AudioDevices &GetDevices(); + + uint32_t GetRTPTimestamp() const noexcept; - [[nodiscard]] double GetCaptureVolumeLevel() const noexcept; - [[nodiscard]] double GetSSRCVolumeLevel(uint32_t ssrc) const noexcept; + enum class VADMethod { + Gate, + RNNoise, + }; - [[nodiscard]] AudioDevices &GetDevices(); + void SetVADMethod(const std::string &method); + void SetVADMethod(VADMethod method); + VADMethod GetVADMethod() const; - [[nodiscard]] uint32_t GetRTPTimestamp() const noexcept; + float GetCurrentVADProbability() const; + double GetRNNProbThreshold() const; private: void OnCapturedPCM(const int16_t *pcm, ma_uint32 frames); @@ -74,6 +91,15 @@ private: bool DecayVolumeMeters(); + bool CheckVADVoiceGate(); + +#ifdef WITH_RNNOISE + bool CheckVADRNNoise(const int16_t *pcm); + + void RNNoiseInitialize(); + void RNNoiseUninitialize(); +#endif + friend void data_callback(ma_device *, void *, const void *, ma_uint32); friend void capture_data_callback(ma_device *, void *, const void *, ma_uint32); @@ -106,6 +132,8 @@ private: std::atomic<double> m_capture_gate = 0.0; std::atomic<double> m_capture_gain = 1.0; + std::atomic<double> m_prob_threshold = 0.5; + std::atomic<float> m_vad_prob = 0.0; std::unordered_set<uint32_t> m_muted_ssrcs; std::unordered_map<uint32_t, double> m_volume_ssrc; @@ -115,6 +143,10 @@ private: AudioDevices m_devices; + VADMethod m_vad_method; +#ifdef WITH_RNNOISE + DenoiseState *m_rnnoise; +#endif std::atomic<uint32_t> m_rtp_timestamp = 0; public: |