summaryrefslogtreecommitdiff
path: root/src/audio/manager.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/audio/manager.hpp')
-rw-r--r--src/audio/manager.hpp54
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: