Skip to content

Voice: echo cancellation (AEC3 in pure Rust), on by default - #132

Merged
AlxcBTW merged 1 commit into
mainfrom
feat/voice-aec
Oct 27, 2026
Merged

AlxcBTW merged 1 commit into
mainfrom
feat/voice-aec

Conversation

@AlxcBTW

@AlxcBTW AlxcBTW commented Oct 27, 2026 •

Copy link
Copy Markdown
Member

Party voice on speakers echoed: the far member's voice went from the speakers into the microphone and back to the party. The engine now runs WebRTC's AEC3 (the pure-Rust port sonora, BSD-3-Clause) on the microphone before RNNoise and the gate.

  • ADR 0040 records the choice and the rejected options (tonarino C++ bindings need meson/ninja or a system package, OS-level cancellers differ per platform, speex).
  • Config::echo_cancellation (default on), Engine::set_echo_cancellation, control command voice_echo { enabled } (new command, old launchers never send it).
  • The reference is the mixer's own output, released to the canceller when the device has taken it off its queue; the canceller is bypassed while nothing is played.
  • Workspace rust-version 1.88 -> 1.91 (sonora MSRV; CI uses stable).
  • Tests (offline, fixed seeds): canceller ERLE 44.7 dB, whole engine through Opus 50 dB (0.8 dB with it off), transparent with a silent reference, double talk.

Not verified: real speakers/microphones.


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

ADR 0040. Echo cancellation sits first in the sending chain, the reference is released when the device has taken it off its queue, and the control protocol gets voice_echo. Offline ERLE tests.
@AlxcBTW
AlxcBTW merged commit a3f4212 into main Oct 27, 2026
18 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant