diff --git a/webrtc/modules/audio_processing/audio_processing_impl.cc b/webrtc/modules/audio_processing/audio_processing_impl.cc index b0433efa8c..afeebba4e5 100644 --- a/webrtc/modules/audio_processing/audio_processing_impl.cc +++ b/webrtc/modules/audio_processing/audio_processing_impl.cc @@ -728,8 +728,12 @@ int AudioProcessingImpl::ProcessStreamLocked() { int gain_db = public_submodules_->gain_control->is_enabled() ? public_submodules_->gain_control->compression_gain_db() : 0; + float gain = std::pow(10.f, gain_db / 20.f); + gain *= capture_nonlocked_.level_controller_enabled ? + private_submodules_->level_controller->GetLastGain() : + 1.f; public_submodules_->intelligibility_enhancer->SetCaptureNoiseEstimate( - public_submodules_->noise_suppression->NoiseEstimate(), gain_db); + public_submodules_->noise_suppression->NoiseEstimate(), gain); } // Ensure that the stream delay was set before the call to the diff --git a/webrtc/modules/audio_processing/intelligibility/intelligibility_enhancer.cc b/webrtc/modules/audio_processing/intelligibility/intelligibility_enhancer.cc index 243bd12229..63bb1b9b76 100644 --- a/webrtc/modules/audio_processing/intelligibility/intelligibility_enhancer.cc +++ b/webrtc/modules/audio_processing/intelligibility/intelligibility_enhancer.cc @@ -111,9 +111,8 @@ IntelligibilityEnhancer::IntelligibilityEnhancer(int sample_rate_hz, } void IntelligibilityEnhancer::SetCaptureNoiseEstimate( - std::vector noise, int gain_db) { + std::vector noise, float gain) { RTC_DCHECK_EQ(noise.size(), num_noise_bins_); - const float gain = std::pow(10.f, gain_db / 20.f); for (auto& bin : noise) { bin *= gain; } diff --git a/webrtc/modules/audio_processing/intelligibility/intelligibility_enhancer.h b/webrtc/modules/audio_processing/intelligibility/intelligibility_enhancer.h index 389f6ae567..5ad343f2fe 100644 --- a/webrtc/modules/audio_processing/intelligibility/intelligibility_enhancer.h +++ b/webrtc/modules/audio_processing/intelligibility/intelligibility_enhancer.h @@ -36,7 +36,7 @@ class IntelligibilityEnhancer : public LappedTransform::Callback { size_t num_noise_bins); // Sets the capture noise magnitude spectrum estimate. - void SetCaptureNoiseEstimate(std::vector noise, int gain_db); + void SetCaptureNoiseEstimate(std::vector noise, float gain); // Reads chunk of speech in time domain and updates with modified signal. void ProcessRenderAudio(float* const* audio, diff --git a/webrtc/modules/audio_processing/intelligibility/intelligibility_enhancer_unittest.cc b/webrtc/modules/audio_processing/intelligibility/intelligibility_enhancer_unittest.cc index 852357e2da..45f338c642 100644 --- a/webrtc/modules/audio_processing/intelligibility/intelligibility_enhancer_unittest.cc +++ b/webrtc/modules/audio_processing/intelligibility/intelligibility_enhancer_unittest.cc @@ -407,18 +407,17 @@ TEST_F(IntelligibilityEnhancerTest, TestSolveForGains) { } TEST_F(IntelligibilityEnhancerTest, TestNoiseGainHasExpectedResult) { - const int kGainDB = 6; - const float kGainFactor = std::pow(10.f, kGainDB / 20.f); + const float kGain = 2.f; const float kTolerance = 0.007f; std::vector noise(kNumNoiseBins); std::vector noise_psd(kNumNoiseBins); std::generate(noise.begin(), noise.end(), float_rand); for (size_t i = 0; i < kNumNoiseBins; ++i) { - noise_psd[i] = kGainFactor * kGainFactor * noise[i] * noise[i]; + noise_psd[i] = kGain * kGain * noise[i] * noise[i]; } float* clear_cursor = clear_data_.data(); for (size_t i = 0; i < kNumFramesToProcess; ++i) { - enh_->SetCaptureNoiseEstimate(noise, kGainDB); + enh_->SetCaptureNoiseEstimate(noise, kGain); enh_->ProcessRenderAudio(&clear_cursor, kSampleRate, kNumChannels); } const std::vector& estimated_psd =