From a0497fdc482933dbdf6b8302c2c43c1c2e325e3d Mon Sep 17 00:00:00 2001 From: Sakura-RanChen <1908198662@qq.com> Date: Tue, 14 Apr 2026 10:18:09 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=99=E5=A4=8D=E7=94=A8=E5=9E=8BTTS?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=9B=B8=E5=85=B3=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/providers/tts/alibl_stream.py | 15 ++++++++++++--- .../core/providers/tts/aliyun_stream.py | 9 +++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/main/xiaozhi-server/core/providers/tts/alibl_stream.py b/main/xiaozhi-server/core/providers/tts/alibl_stream.py index 8bad4ee1..af912ef6 100644 --- a/main/xiaozhi-server/core/providers/tts/alibl_stream.py +++ b/main/xiaozhi-server/core/providers/tts/alibl_stream.py @@ -331,7 +331,16 @@ class TTSProvider(TTSProviderBase): if isinstance(msg, str): # JSON控制消息 try: data = json.loads(msg) - event = data["header"].get("event") + header = data.get("header", {}) + event = header.get("event") + task_id = header.get("task_id") + + # 只处理当前活跃会话的响应 + if task_id and self.conn.sentence_id != task_id: + if event in ["task-finished", "task-failed"]: + logger.bind(tag=TAG).debug(f"收到残余下行结束响应重置会话状态~~") + self.activate_session = False + continue if event == "task-started": logger.bind(tag=TAG).debug("TTS任务启动成功~") @@ -352,8 +361,8 @@ class TTSProvider(TTSProviderBase): self.activate_session = False self._process_before_stop_play_files() elif event == "task-failed": - error_code = data["header"].get("error_code", "unknown") - error_message = data["header"].get("error_message", "未知错误") + error_code = header.get("error_code", "unknown") + error_message = header.get("error_message", "未知错误") logger.bind(tag=TAG).error( f"TTS任务失败: {error_code} - {error_message}" ) diff --git a/main/xiaozhi-server/core/providers/tts/aliyun_stream.py b/main/xiaozhi-server/core/providers/tts/aliyun_stream.py index d9a0ca44..824e7902 100644 --- a/main/xiaozhi-server/core/providers/tts/aliyun_stream.py +++ b/main/xiaozhi-server/core/providers/tts/aliyun_stream.py @@ -423,6 +423,15 @@ class TTSProvider(TTSProviderBase): data = json.loads(msg) header = data.get("header", {}) event_name = header.get("name") + task_id = header.get("task_id") + + # 只处理当前活跃会话的响应 + if task_id and self.task_id != task_id: + if event_name in ["SynthesisCompleted", "TaskFailed"]: + logger.bind(tag=TAG).debug(f"收到残余下行结束响应重置会话状态~~") + self.activate_session = False + continue + if event_name == "SynthesisStarted": logger.bind(tag=TAG).debug("TTS合成已启动") self.tts_audio_queue.put(