diff --git a/src/app/plugins/call/CallEmbed.ts b/src/app/plugins/call/CallEmbed.ts index f029bfaec..7b2226765 100644 --- a/src/app/plugins/call/CallEmbed.ts +++ b/src/app/plugins/call/CallEmbed.ts @@ -237,10 +237,14 @@ export class CallEmbed { denoiseMode === 'browser' || (denoiseMode === 'ml' && denoiseNativeNS) ).toString(), - // Turn the browser's auto gain control OFF for the ML tier only: its - // dynamic gain fights the in-source ML denoiser (pumping). Browser/off - // tiers keep the browser's normal capture pipeline (AGC on). - autoGainControl: (denoiseMode !== 'ml').toString(), + // Keep the browser's auto gain control ON in every tier. It used to be + // turned off for the ML tier ("pumping"), but AGC is what brings a quiet + // mic up to speaking level: without it ML-tier voices went out 10-20 dB + // quieter than the browser tier, while the models themselves keep speech + // within ~1.5 dB (measured: RNNoise, Speex, DTLN, DeepFilterNet3). Chrome's + // AGC2 only adapts during speech, and the model runs after it, so it still + // removes the noise AGC leaves in the pauses. + autoGainControl: 'true', audio: initialAudio.toString(), video: initialVideo.toString(), header: 'none',