我正在尝试使用 WebRtc 库创建一个独立的 AGC。(输入 - wav 文件,输出 - 调整增益的 wav 文件)。但此时我对这个问题有一些问题。
我正在尝试使用在gain_control.h
文件中声明的函数。当我使用 WebRtcAgc_Process(....) 时,我获得了适用于整个信号的恒定增益,但不适用于取决于输入信号幅度的非线性增益。
可能我应该使用其他功能来达到我的目的吗?如何通过 WebRTC 库实现 AGC?
AGC 的主要目的是提供推荐的系统麦克风音量,用户可以通过操作系统设置该音量。如果您想应用纯数字增益,您可以将其配置为两种模式之一(从modules/audio_processing/include/audio_processing.h
,但gain_control.h
具有类似模式):
// Adaptive mode intended for situations in which an analog volume control
// is unavailable. It operates in a similar fashion to the adaptive analog
// mode, but with scaling instead applied in the digital domain. As with
// the analog mode, it additionally uses a digital compression stage.
kAdaptiveDigital,
// Fixed mode which enables only the digital compression stage also used by
// the two adaptive modes.
//
// It is distinguished from the adaptive modes by considering only a
// short time-window of the input signal. It applies a fixed gain through
// most of the input level range, and compresses (gradually reduces gain
// with increasing level) the input signal at higher levels. This mode is
// preferred on embedded devices where the capture signal level is
// predictable, so that a known gain can be applied.
kFixedDigital
您可以通过 设置这些WebRtcAgc_Init()
,但除非您需要避免开销,否则我建议只使用 AudioProcessing 类。
增益调整仅在 0135 * 语音活动期间进行。输入语音长度可以是 10ms 或 0136 * 20ms,输出长度相同。
webrtcage_process 快速概览
int WebRtcAgc_Process(void* agcInst,
const WebRtc_Word16* inNear,
const WebRtc_Word16* inNear_H,
WebRtc_Word16 samples,
WebRtc_Word16* out,
WebRtc_Word16* out_H,
WebRtc_Word32 inMicLevel,
WebRtc_Word32* outMicLevel,
WebRtc_Word16 echo,
WebRtc_UWord8* saturationWarning);