Fox 2026-06-04: "the cohost is hearing two feeds now." Regression from role-aware audio routing. Pre-refactor: SFU mic and mesh mic for the same speaker both wrote into the remoteAudio map (both used <audio> elements), so the second arrival overwrote the first — one audible path. Post-refactor: SFU mic for speakers / cohosts / hosts goes through AudioContext + worklet (stored in listenerAudioNodes), mesh mic still uses <audio> (in remoteAudio). Different maps, both play, same voice in two different delays = echo / phasing. Fix: at the top of mesh pc.ontrack, call detachListenerStream(uuid) to remove the SFU worklet path. The existing canSpeak-mesh-skip in handleRemoteSfuTrack already prevents the OPPOSITE race (SFU mic arriving after mesh is connected). Logged so we can see the handoff: "mesh audio attached for XXXX — SFU worklet path detached". |
||
|---|---|---|
| .. | ||
| blog | ||
| fonts | ||
| chat.html | ||
| host-your-own.html | ||
| how-it-works.html | ||
| index.html | ||
| kernel.html | ||
| stamp.js | ||
| zebra-audio.html | ||
| zebra-spaces.html | ||