From 634cd40fdc7eef36c26d2131b985fdf1c0d425f3 Mon Sep 17 00:00:00 2001 From: Siavash Sameni Date: Sat, 28 Mar 2026 15:31:23 +0400 Subject: [PATCH] =?UTF-8?q?fix:=20web=20bridge=20low-latency=20config=20?= =?UTF-8?q?=E2=80=94=20disable=20silence=20suppression,=20reduce=20jitter?= =?UTF-8?q?=20buffer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PTT mode was causing delayed/lost audio because: 1. Silence suppression ate the start of speech after PTT release 2. Jitter buffer target depth was too high for interactive use Web bridge now uses: - suppression_enabled: false (PTT handles silence at browser level) - jitter_target: 3 (60ms vs ~1s default) - jitter_max: 20 (400ms cap) - jitter_min: 1 (start playing after 20ms) Co-Authored-By: Claude Opus 4.6 (1M context) --- crates/wzp-web/src/main.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/crates/wzp-web/src/main.rs b/crates/wzp-web/src/main.rs index c4cc6a0..56f2a5e 100644 --- a/crates/wzp-web/src/main.rs +++ b/crates/wzp-web/src/main.rs @@ -279,7 +279,15 @@ async fn handle_ws(socket: WebSocket, room: String, state: AppState) { } } - let config = CallConfig::default(); + // Web bridge config: low latency for PTT, disable silence suppression + // (PTT handles silence at the browser level, no need to suppress here) + let config = CallConfig { + suppression_enabled: false, + jitter_target: 3, // 60ms instead of default (~1s) + jitter_max: 20, // 400ms cap + jitter_min: 1, // start playing after 20ms + ..CallConfig::default() + }; let encoder = Arc::new(Mutex::new(CallEncoder::new(&config))); let decoder = Arc::new(Mutex::new(CallDecoder::new(&config)));