fix(call): keep browser AGC on with ML noise suppression (DeepFilterNet "makes people quiet") #480

Merged
jared merged 1 commits from fix/denoise-keep-agc into lotus 2026-10-29 21:44:23 -04:00
Owner

Choosing an ML noise suppressor turned off the browser's auto gain control along with its noise suppressor (autoGainControl: denoiseMode !== 'ml'). The call then carried the mic's raw level, so voices were 10–20 dB quieter than in the browser tier. That's the "DeepFilterNet makes my audio so quiet" report.

Measured: real-time speech (clean, and with −30 dBFS background noise) run through each model exactly as Lotus Call runs it. That means the same assets, sample rates (DTLN at 16 kHz), the 15% dry floor for RNNoise/Speex, and DFN level 60. A no-model control path reads 0.0 dB.

Model Voice (clean) Voice (noisy) Noise in pauses
RNNoise −1.3 dB −2.8 dB −15.5 dB
Speex −1.5 dB −2.2 dB −6.3 dB
DTLN −0.1 dB −1.6 dB −29.2 dB
DeepFilterNet3 −1.7 dB −1.6 dB −12.5 dB

The models keep voices within about 1.5–3 dB, so the loss came from AGC, not the models. This keeps AGC on in every tier. Chrome's AGC2 only adapts during speech, and the model runs after it, so the "pumping" concern behind the old setting no longer applies.

1453 unit tests pass; eslint and tsc are clean.

🤖 Generated with Claude Code

https://claude.ai/code/session_017PCb59uY3UKqDqt7B6hzd5

Choosing an ML noise suppressor turned off the browser's **auto gain control** along with its noise suppressor (`autoGainControl: denoiseMode !== 'ml'`). The call then carried the mic's raw level, so voices were 10–20 dB quieter than in the browser tier. That's the "DeepFilterNet makes my audio so quiet" report. **Measured:** real-time speech (clean, and with −30 dBFS background noise) run through each model exactly as Lotus Call runs it. That means the same assets, sample rates (DTLN at 16 kHz), the 15% dry floor for RNNoise/Speex, and DFN level 60. A no-model control path reads 0.0 dB. | Model | Voice (clean) | Voice (noisy) | Noise in pauses | |---|---|---|---| | RNNoise | −1.3 dB | −2.8 dB | −15.5 dB | | Speex | −1.5 dB | −2.2 dB | −6.3 dB | | DTLN | −0.1 dB | −1.6 dB | −29.2 dB | | DeepFilterNet3 | −1.7 dB | −1.6 dB | −12.5 dB | The models keep voices within about 1.5–3 dB, so the loss came from AGC, not the models. This keeps AGC on in every tier. Chrome's AGC2 only adapts during speech, and the model runs after it, so the "pumping" concern behind the old setting no longer applies. 1453 unit tests pass; eslint and tsc are clean. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_017PCb59uY3UKqDqt7B6hzd5
jared added 1 commit 2026-10-29 21:25:49 -04:00
fix(call): keep browser AGC on with ML noise suppression
CI / Build & Quality Checks (push) Skipped
CI / Secret scan (gitleaks) (push) Skipped
CI / Playwright smoke (e2e) (push) Skipped
CI / Secret scan (gitleaks) (pull_request) Successful in 11s
CI / Build & Quality Checks (pull_request) Successful in 1m30s
CI / Trigger Desktop Build (pull_request) Skipped
CI / Docker image build & smoke test (pull_request) Skipped
CI / Playwright smoke (e2e) (pull_request) Successful in 16m57s
58f7b18746
Choosing an ML model (RNNoise / Speex / DTLN / DeepFilterNet) turned the
browser's auto gain control off along with its noise suppressor, so the
call carried the mic's raw level: voices came out 10-20 dB quieter than
in the browser tier and DeepFilterNet "made people quiet". Measured with
speech through each model exactly as the call runs it, the models keep
the voice within ~1.5 dB (DTLN -0.1, DFN3 -1.7, RNNoise -1.3, Speex -1.5)
while cutting background noise 6-29 dB, so the loss was AGC, not the
models. Keep AGC on in every tier.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017PCb59uY3UKqDqt7B6hzd5
jared scheduled this pull request to auto merge when all checks succeed 2026-10-29 21:25:56 -04:00
jared merged commit e2ce177930 into lotus 2026-10-29 21:44:23 -04:00
jared deleted branch fix/denoise-keep-agc 2026-10-29 21:44:23 -04:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: LotusGuild/cinny#480