diff --git a/app/index.js b/app/index.js index c0b21cf..fa4e8b2 100644 --- a/app/index.js +++ b/app/index.js @@ -301,6 +301,10 @@ class GlobalBindings { if (!this.client) { return } + if (voiceHandler) { + voiceHandler.end() + voiceHandler = null + } let mode = this.settings.voiceMode if (mode === 'cont') { voiceHandler = new ContinuousVoiceHandler(this.client) @@ -310,7 +314,18 @@ class GlobalBindings { } else { log('Unknown voice mode:', mode) + return } + voiceHandler.on('started_talking', () => { + if (this.thisUser()) { + this.thisUser().talking('on') + } + }) + voiceHandler.on('stopped_talking', () => { + if (this.thisUser()) { + this.thisUser().talking('off') + } + }) } this.messageBoxHint = ko.pureComputed(() => { @@ -525,6 +540,9 @@ var voiceHandler initVoice(data => { if (!ui.client) { + if (voiceHandler) { + voiceHandler.end() + } voiceHandler = null } else if (voiceHandler) { voiceHandler.write(new Float32Array(data.buffer, data.byteOffset, data.byteLength / 4)) diff --git a/app/voice.js b/app/voice.js index 6f0ca97..e6fc026 100644 --- a/app/voice.js +++ b/app/voice.js @@ -15,9 +15,23 @@ class VoiceHandler extends Writable { _getOrCreateOutbound () { if (!this._outbound) { this._outbound = this._client.createVoiceStream() + this.emit('started_talking') } return this._outbound } + + _stopOutbound () { + if (this._outbound) { + this.emit('stopped_talking') + this._outbound.end() + this._outbound = null + } + } + + _final (callback) { + this._stopOutbound() + callback() + } } export class ContinuousVoiceHandler extends VoiceHandler {