fix: mic mute crackling + add AEC/NoiseSuppressor + dedup room participants
Mic mute: the send loop now zeros the capture buffer when muted instead of relying on write_audio() to skip writes. Previously stale ring data and AGC amplification of near-silence caused crackling artifacts. AEC: attach Android's hardware AcousticEchoCanceler to the AudioRecord session. Also attach NoiseSuppressor when available. Both are released on capture stop. Room UI: deduplicate participants by fingerprint so ghost entries from stale relay state don't show duplicate names. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -339,6 +339,12 @@ async fn run_call(
|
||||
continue;
|
||||
}
|
||||
|
||||
// Mute: zero out the buffer so Opus encodes silence.
|
||||
// We still read from the ring to prevent it from filling up.
|
||||
if state.muted.load(Ordering::Relaxed) {
|
||||
capture_buf.fill(0);
|
||||
}
|
||||
|
||||
// AGC: normalize capture volume before encoding
|
||||
capture_agc.process_frame(&mut capture_buf);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user