From 24a6ce5295f15369e22b0ea8823cfd76dc04312d Mon Sep 17 00:00:00 2001 From: cfy666 <3087823110@qq.com> Date: Sun, 14 Jun 2026 12:01:34 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=96=B0=E6=97=A7=20T?= =?UTF-8?q?TS=20=E8=AF=AD=E9=9F=B3=E9=87=8D=E5=8F=A0=E6=92=AD=E6=94=BE?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - TTSPlayer 新增 stopCurrentAudio() 方法,play() 开始前先停止旧音频 - onSpeechEnd 发送新 query 前停止上一轮 TTS 播放 --- frontend/src/hooks/useVisionSession.ts | 4 ++++ frontend/src/lib/ttsPlayer.ts | 16 ++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/frontend/src/hooks/useVisionSession.ts b/frontend/src/hooks/useVisionSession.ts index 0bdab7c..a2ba760 100644 --- a/frontend/src/hooks/useVisionSession.ts +++ b/frontend/src/hooks/useVisionSession.ts @@ -158,6 +158,10 @@ export function useVisionSession() { return; } + // 停止上一轮的 TTS 播放,防止新旧音频重叠 + ttsPlayerRef.current?.stop(); + setIsAudioPlaying(false); + const frame = captureFrame(); if (!frame) { console.warn("[Session] 无法捕获图像帧"); diff --git a/frontend/src/lib/ttsPlayer.ts b/frontend/src/lib/ttsPlayer.ts index a7f283f..3228b12 100644 --- a/frontend/src/lib/ttsPlayer.ts +++ b/frontend/src/lib/ttsPlayer.ts @@ -47,6 +47,19 @@ export class TTSPlayer { this._isPlaying = false; } + /** + * 停止当前正在播放的音频(不清空 chunks) + * 用于 play() 开始前,防止新旧音频重叠 + */ + private stopCurrentAudio(): void { + if (this.audio) { + this.audio.pause(); + this.audio.removeAttribute("src"); + this.audio = null; + } + this._isPlaying = false; + } + /** 暂停播放 */ pause(): void { this.audio?.pause(); @@ -61,6 +74,9 @@ export class TTSPlayer { private play(mimeType: string): void { if (this.chunks.length === 0) return; + // 停止当前正在播放的音频,防止重叠 + this.stopCurrentAudio(); + // 拼接所有 Base64 片段 const combined = this.chunks.join(""); this.chunks = [];