Audio track.attach() appears to create more than one audio output?
rykkers opened this issue · 2 comments
Describe the bug
Expected:
Receive remote audio track, attach it using track.attach(), then use the returned audio element to be able to alter sound output e.g. volume, muting, sinkId etc.
Actual:
No matter what i do with that audio element (even delete it), the audio continues to play. It's clearly being played through another audio element that hasn't been added to the DOM.
If this is a known 'feature' i'd recommend that it's added to the docs, as currently you're encouraged to add this new DOM element to the page, which is essentially useless.
Reproduction
I can reproduce on the demo app (https://meet.livekit.io/)
- Join a room with two people
- Access the remote audio DOM element
audioElem = document.getElementsByClassName("lk-participant-media-audio")[0];
- Note that it is muted and volume 0
audioElem.muted
- If you unmute and set volume to 1 you'll hear echo as now two audio elements are playing the audio
Logs
No response
System Info
System:
OS: macOS 14.0
CPU: (10) arm64 Apple M2 Pro
Memory: 1.21 GB / 32.00 GB
Shell: 5.9 - /bin/zsh
Binaries:
Node: 20.3.0 - ~/.nvm/versions/node/v20.3.0/bin/node
npm: 9.6.7 - ~/.nvm/versions/node/v20.3.0/bin/npm
Browsers:
Chrome: 125.0.6422.142
Firefox: 118.0.2
Safari: 17.0
npmPackages:
livekit-client: ^2.1.1 => 2.2.0
Severity
serious, but I can work around it
Additional Information
No response
This is expected, as the current default playback for remote tracks is via WebAudio.
There are APIs today that you can use to change volume (e.g. publication.setVolume
).
That said, we're currently planning to change the default setting to not use WebAudio in this PR which also outlines some of the reasoning.
For a quick fix for you, just set webAudioMix: false
in your room options
Ok, that's amazing thanks.
Also a reminder for myself to also look at PRs before raising an issue.
Although i'm used to most PRs being attached to an "Open" issue.
Keep up the good work!