Repository navigation
fix(voice): music and the radio no longer eat your voice - #4460
Merged
Merged
Conversation
Chrome's echo canceller took everything the browser plays as echo, so it suppressed the rider's voice under music, on headphones too. It now hears crew voices only: capture asks for `remote-only`, and each voice's element plays a copy at 0.2 so the canceller still has it. Changelog: Your voice stays clear while music, the radio or a video plays. On speakers, a song's singer can now reach your crew faintly; headphones avoid that.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Voices sounded over-cancelled while music, the radio or a video played. Noise cancellation was not the cause: Chrome's echo canceller was.
echoCancellation: trueis Chrome-wide echo cancellation. Its reference is the output device, so music counted as echo, and the canceller suppressed the rider's voice under it, on headphones too.The change
echoCancellation: 'remote-only', so only audio an element plays counts as echo.remote-onlydoes not see. Each voice's element now plays a copy atECHO_REFERENCE(0.2, 14 dB under the graph), on the same output. It goes to 0 at fader 0 and while Away.true.createMediaElementSourcewas the obvious way to avoid a second copy. It does not work:WebMediaPlayerMShas no audio provider, so the element keeps playing.Numbers
Raw capture through the real model and gate, speech at −26 dBFS. With
--mute-audio,truecancels nothing, so the "before" rows put music in the same canceller's reference through a remote track underremote-only.Crew echo in a real call through LiveKit: a second rider's mic carries the first rider's voice at −26 dBFS. Without the copy it goes back at −24 dBFS. With the copy it reaches −56 dBFS within 10 s and stays between −56 and −81. The element-volume sweep is in
docs/RESEARCH.md§22.6: 0.2 cancels, 0.1 cancels nothing.Regression, real call, at the listener against #4433: quiet 4.04 → 4.07, fan 3.19 → 3.20, bike 2.72 → 2.71. One quiet run scored 3.22 with 0.58 % concealment. Two reruns scored 4.07 with none, so I read that one as a stall.
What it costs
true, so it can sound worse over music than the call does.Not verified
truewith music on real speakers. Reproducing it needs sound out of the Mac, so the before rows use the same canceller by another route.