diff --git a/.changeset/fix-audio-context.md b/.changeset/fix-audio-context.md new file mode 100644 index 0000000000..dcf1b0e667 --- /dev/null +++ b/.changeset/fix-audio-context.md @@ -0,0 +1,5 @@ +--- +"livekit-client": patch +--- + +Properly clean up event listeners in getNewAudioContext() \ No newline at end of file diff --git a/src/room/track/LocalAudioTrack.ts b/src/room/track/LocalAudioTrack.ts index 0f9abea619..fb77e2e9ec 100644 --- a/src/room/track/LocalAudioTrack.ts +++ b/src/room/track/LocalAudioTrack.ts @@ -244,7 +244,7 @@ export default class LocalAudioTrack extends LocalTrack { const trackIsSilent = await detectSilence(this); if (trackIsSilent) { if (!this.isMuted) { - this.log.warn('silence detected on local audio track', this.logContext); + this.log.debug('silence detected on local audio track', this.logContext); } this.emit(TrackEvent.AudioSilenceDetected); } diff --git a/src/room/track/utils.ts b/src/room/track/utils.ts index e12aa0d419..e4974e76eb 100644 --- a/src/room/track/utils.ts +++ b/src/room/track/utils.ts @@ -147,10 +147,18 @@ export function getNewAudioContext(): AudioContext | void { } } catch (e) { console.warn('Error trying to auto-resume audio context', e); + } finally { + window.document.body?.removeEventListener('click', handleResume); } - - window.document.body?.removeEventListener('click', handleResume); }; + + // https://developer.mozilla.org/en-US/docs/Web/API/BaseAudioContext/statechange_event + audioContext.addEventListener('statechange', () => { + if (audioContext.state === 'closed') { + window.document.body?.removeEventListener('click', handleResume); + } + }); + window.document.body.addEventListener('click', handleResume); } return audioContext;