AudioProcessingImpl: Add a VAD submodule

Add a VoiceActivityDetectorWrapper submodule in AudioProcessingImpl
and enable injecting speech probability into GainController2.

Bug: webrtc:13663
Change-Id: I05e13b737d085b45ac8ce76660191867c56834c2
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/265166
Commit-Queue: Hanna Silen <silen@webrtc.org>
Reviewed-by: Alessio Bazzica <alessiob@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#37275}
This commit is contained in:
Hanna Silen
2022-06-16 16:35:45 +02:00
committed by WebRTC LUCI CQ
parent ff45105b42
commit 0c1ad2992b
7 changed files with 348 additions and 17 deletions

View File

@ -30,9 +30,12 @@ class AudioBuffer;
// microphone gain and/or applying digital gain.
class GainController2 {
public:
// Ctor. If `use_internal_vad` is true, an internal voice activity
// detector is used for digital adaptive gain.
GainController2(const AudioProcessing::Config::GainController2& config,
int sample_rate_hz,
int num_channels);
int num_channels,
bool use_internal_vad);
GainController2(const GainController2&) = delete;
GainController2& operator=(const GainController2&) = delete;
~GainController2();
@ -44,13 +47,18 @@ class GainController2 {
void SetFixedGainDb(float gain_db);
// Applies fixed and adaptive digital gains to `audio` and runs a limiter.
void Process(AudioBuffer* audio);
// If the internal VAD is used, `speech_probability` is ignored. Otherwise
// `speech_probability` is used for digital adaptive gain if it's available
// (limited to values [0.0, 1.0]).
void Process(absl::optional<float> speech_probability, AudioBuffer* audio);
// Handles analog level changes.
void NotifyAnalogLevel(int level);
static bool Validate(const AudioProcessing::Config::GainController2& config);
AvailableCpuFeatures GetCpuFeatures() const { return cpu_features_; }
private:
static int instance_count_;
const AvailableCpuFeatures cpu_features_;