c++ - registrados - listado de conservadores de ascensores habilitados
WebRTC AGC(control automático de ganancia) (2)
Aquí está la secuencia de operaciones que se utilizará para Webrtc_AGC:
- Crear AGC:
WebRtcAgc_Create
- Inicializar AGC:
WebRtcAgc_Init
- Establecer config:
WebRtcAgc_set_config
- Inicializar
capture_level = 0
- Para
kAgcModeAdaptiveDigital
, invoqueWebRtcAgc_VirtualMic
:WebRtcAgc_VirtualMic
- Búfer de proceso con nivel de
capture_level
:WebRtcAgc_Process
- Obtenga el nivel de captura de salida devuelto por
WebRtcAgc_Process
yWebRtcAgc_Process
encapture_level
- Repita del 5 al 7 para los
audio buffers
- Destruye el AGC:
WebRtcAgc_Free
Consulte webrtc / modules / audio_processing / gain_control_impl.cc para referencia.
Estoy probando el WebRTC AGC pero debo estar haciendo algo mal porque la señal simplemente pasa sin modificaciones.
Así es como creo e inicializo el AGC:
agcConfig.compressionGaindB = 9;
agcConfig.limiterEnable = 1;
agcConfig.targetLevelDbfs = 9; /* 9dB below full scale */
WebRtcAgc_Create(&agc);
WebRtcAgc_Init(agc, minLevel, maxLevel, kAgcModeFixedDigital, 8000);
WebRtcAgc_set_config(agc, agcConfig);
Y luego, para cada bloque de muestra de 10 ms, hago lo siguiente:
WebRtcAgc_Process(agc, micData, NULL, 80, micData, NULL, micLevelIn, &micLevelOut, 0, &saturationWarning);
Donde micLevelIn
se establece en 0.
¿Alguien puede decirme qué estoy haciendo mal?
Esperaba que un tono sinusoidal a escala completa se atenuara al nivel de DBFS objetivo; y un tono sinusoidal de bajo nivel (es decir, -30dBFS) se amplificaría para que coincida con el nivel objetivo de DBFS. Pero eso no es lo que estoy viendo.
Prueba esto:
agcConfig.compressionGaindB = 9; agcConfig.limiterEnable = 1; agcConfig.targetLevelDbfs = 9; /* 9dB below full scale */ WebRtcAgc_Create(&agc); WebRtcAgc_Init(&agc, minLevel, maxLevel, kAgcModeFixedDigital, 8000); WebRtcAgc_set_config(&agc, &agcConfig);