Replace queue with ring buffer jitter absorption for live caller audio

- Server: 150ms pre-buffer ring buffer eliminates gaps from timing mismatches
- Browser playback: 150ms jitter buffer (up from 80ms) for network jitter
- Capture chunks: 960 samples/60ms (better network efficiency)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-05 16:37:50 -07:00
parent 7aed4d9c34
commit 4d97ea9099
3 changed files with 53 additions and 26 deletions

View File

@@ -46,7 +46,7 @@ class CallerProcessor extends AudioWorkletProcessor {
constructor() {
super();
this.buffer = [];
this.targetSamples = 640; // 40ms at 16kHz — low latency
this.targetSamples = 960; // 60ms at 16kHz
}
process(inputs) {
const input = inputs[0][0];
@@ -84,7 +84,7 @@ class PlaybackProcessor extends AudioWorkletProcessor {
this.readPos = 0;
this.available = 0;
this.started = false;
this.jitterMs = 80; // buffer 80ms before starting playback
this.jitterMs = 150; // buffer 150ms before starting playback
this.jitterSamples = Math.floor(16000 * this.jitterMs / 1000);
this.port.onmessage = (e) => {