From 90f74391619d45c07ba77c53894586148cbd4516 Mon Sep 17 00:00:00 2001 From: dwrz Date: Wed, 8 Jul 2026 18:31:12 +0000 Subject: [PATCH] Add abort controller to TTS --- internal/service/static/tts.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/internal/service/static/tts.js b/internal/service/static/tts.js index 0309433..ac88575 100644 --- a/internal/service/static/tts.js +++ b/internal/service/static/tts.js @@ -24,6 +24,7 @@ export class TTSPlayer extends EventTarget { this.currentAudio = null; this.currentAudioURL = null; this._muted = false; + this._abortController = null; } /** @@ -46,6 +47,10 @@ export class TTSPlayer extends EventTarget { */ stop() { this._stopCurrentAudio(); + if (this._abortController) { + this._abortController.abort(); + this._abortController = null; + } this.playQueue = []; this._playing = false; @@ -124,6 +129,9 @@ export class TTSPlayer extends EventTarget { * @private */ async _synthesizeAndPlay(text, voice) { + this._abortController = new AbortController(); + const { signal } = this._abortController; + try { this._stopCurrentAudio(); @@ -136,6 +144,7 @@ export class TTSPlayer extends EventTarget { voice: voice || this.defaultVoice, response_format: 'wav', }), + signal, }); if (!res.ok) { @@ -169,8 +178,11 @@ export class TTSPlayer extends EventTarget { this.currentAudio.play().catch(reject); }); } catch (e) { + if (e.name === 'AbortError') return; console.error('TTS synthesis failed:', e); this._cleanupAudio(); + } finally { + this._abortController = null; } }