mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-19 08:37:54 +01:00

Add the option to run the adaptive digital controller of AGC2 without side-effects - i.e., no gain applied. Tested: adapation verified during a video call in chromium Bug: webrtc:7494 Change-Id: I4776f6012907d76a17a3bca89991da97dc38657f Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/215964 Commit-Queue: Alessio Bazzica <alessiob@webrtc.org> Reviewed-by: Per Åhgren <peah@webrtc.org> Cr-Commit-Position: refs/heads/master@{#33875}
71 lines
2.9 KiB
C++
71 lines
2.9 KiB
C++
/*
|
|
* Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#ifndef MODULES_AUDIO_PROCESSING_AGC2_AGC2_COMMON_H_
|
|
#define MODULES_AUDIO_PROCESSING_AGC2_AGC2_COMMON_H_
|
|
|
|
namespace webrtc {
|
|
|
|
constexpr float kMinFloatS16Value = -32768.0f;
|
|
constexpr float kMaxFloatS16Value = 32767.0f;
|
|
constexpr float kMaxAbsFloatS16Value = 32768.0f;
|
|
|
|
// Minimum audio level in dBFS scale for S16 samples.
|
|
constexpr float kMinLevelDbfs = -90.31f;
|
|
|
|
constexpr int kFrameDurationMs = 10;
|
|
constexpr int kSubFramesInFrame = 20;
|
|
constexpr int kMaximalNumberOfSamplesPerChannel = 480;
|
|
|
|
// Adaptive digital gain applier settings below.
|
|
constexpr float kHeadroomDbfs = 1.0f;
|
|
constexpr float kMaxGainDb = 30.0f;
|
|
constexpr float kInitialAdaptiveDigitalGainDb = 8.0f;
|
|
// At what limiter levels should we start decreasing the adaptive digital gain.
|
|
constexpr float kLimiterThresholdForAgcGainDbfs = -kHeadroomDbfs;
|
|
|
|
// This is the threshold for speech. Speech frames are used for updating the
|
|
// speech level, measuring the amount of speech, and decide when to allow target
|
|
// gain reduction.
|
|
constexpr float kVadConfidenceThreshold = 0.95f;
|
|
|
|
// Adaptive digital level estimator parameters.
|
|
// Number of milliseconds of speech frames to observe to make the estimator
|
|
// confident.
|
|
constexpr float kLevelEstimatorTimeToConfidenceMs = 400;
|
|
constexpr float kLevelEstimatorLeakFactor =
|
|
1.0f - 1.0f / kLevelEstimatorTimeToConfidenceMs;
|
|
|
|
// Robust VAD probability and speech decisions.
|
|
constexpr int kDefaultLevelEstimatorAdjacentSpeechFramesThreshold = 12;
|
|
|
|
// Saturation Protector settings.
|
|
constexpr float kSaturationProtectorInitialHeadroomDb = 20.0f;
|
|
constexpr float kSaturationProtectorExtraHeadroomDb = 5.0f;
|
|
constexpr int kSaturationProtectorBufferSize = 4;
|
|
|
|
// Set the initial speech level estimate so that `kInitialAdaptiveDigitalGainDb`
|
|
// is applied at the beginning of the call.
|
|
constexpr float kInitialSpeechLevelEstimateDbfs =
|
|
-kSaturationProtectorExtraHeadroomDb -
|
|
kSaturationProtectorInitialHeadroomDb - kInitialAdaptiveDigitalGainDb -
|
|
kHeadroomDbfs;
|
|
|
|
// Number of interpolation points for each region of the limiter.
|
|
// These values have been tuned to limit the interpolated gain curve error given
|
|
// the limiter parameters and allowing a maximum error of +/- 32768^-1.
|
|
constexpr int kInterpolatedGainCurveKneePoints = 22;
|
|
constexpr int kInterpolatedGainCurveBeyondKneePoints = 10;
|
|
constexpr int kInterpolatedGainCurveTotalPoints =
|
|
kInterpolatedGainCurveKneePoints + kInterpolatedGainCurveBeyondKneePoints;
|
|
|
|
} // namespace webrtc
|
|
|
|
#endif // MODULES_AUDIO_PROCESSING_AGC2_AGC2_COMMON_H_
|