diff --git a/client/players/LocalAudioPlayer.js b/client/players/LocalAudioPlayer.js index 5df2739c2..ef566e2c2 100644 --- a/client/players/LocalAudioPlayer.js +++ b/client/players/LocalAudioPlayer.js @@ -57,6 +57,8 @@ export default class LocalAudioPlayer extends EventEmitter { this.player.addEventListener('error', this.evtError.bind(this)) this.player.addEventListener('loadedmetadata', this.evtLoadedMetadata.bind(this)) this.player.addEventListener('timeupdate', this.evtTimeupdate.bind(this)) + this.player.addEventListener('waiting', this.evtWaiting.bind(this)) + this.player.addEventListener('playing', this.evtPlaying.bind(this)) var mimeTypes = [ 'audio/flac', @@ -213,6 +215,18 @@ export default class LocalAudioPlayer extends EventEmitter { } } + evtWaiting() { + if (this.audioContext && this.audioContext.state === 'running') { + this.audioContext.suspend() + } + } + + evtPlaying() { + if (this.audioContext && this.audioContext.state === 'suspended') { + this.audioContext.resume() + } + } + destroy() { this.destroySilenceDetector() this.destroyHlsInstance() @@ -421,6 +435,11 @@ export default class LocalAudioPlayer extends EventEmitter { var mappedTime = time + if (this.silenceDetectorNode) { + this.silenceDetectorNode.port.postMessage({ type: 'reset' }) + this._silenceStartTime = null + } + this.silenceMap.reset() this.updateSmartSpeedRegions() this.playWhenReady = playWhenReady diff --git a/client/players/smart-speed/SilenceDetectorProcessor.js b/client/players/smart-speed/SilenceDetectorProcessor.js index fd1fe1904..8814ee481 100644 --- a/client/players/smart-speed/SilenceDetectorProcessor.js +++ b/client/players/smart-speed/SilenceDetectorProcessor.js @@ -16,6 +16,11 @@ class SilenceDetectorProcessor extends AudioWorkletProcessor { this.port.onmessage = (event) => { const msg = event.data + if (msg.type === 'reset') { + this.state = SPEAKING + this.candidateStartSample = 0 + return + } if (msg.type === 'set-threshold') { this.silenceThreshold = msg.value }