From 659c470eba542383987aad227b7f918100f131fa Mon Sep 17 00:00:00 2001
From: wangzhibo <wangzhibo@shsening.com>
Date: 星期五, 11 九月 2026 15:09:05 +0800
Subject: [PATCH] 小智终端 5种 场景模式 OK
---
xiaozhi-esp32-server/main/xiaozhi-server/core/providers/asr/base.py | 39 ++++++++++++++++++++++++++++++++++-----
1 files changed, 34 insertions(+), 5 deletions(-)
diff --git a/xiaozhi-esp32-server/main/xiaozhi-server/core/providers/asr/base.py b/xiaozhi-esp32-server/main/xiaozhi-server/core/providers/asr/base.py
index dcfaf3a..32c79b4 100644
--- a/xiaozhi-esp32-server/main/xiaozhi-server/core/providers/asr/base.py
+++ b/xiaozhi-esp32-server/main/xiaozhi-server/core/providers/asr/base.py
@@ -66,7 +66,16 @@
# 鑷姩/瀹炴椂妯″紡锛氫娇鐢╒AD妫�娴�
conn.asr_audio.append(pcm_frame)
- # 濡傛灉娌℃湁璇煶锛屼笖涔嬪墠涔熸病鏈夊0闊筹紝缂撳瓨閮ㄥ垎闊抽
+ shadowing_listen = (
+ getattr(conn, "interaction_mode", "") == "SHADOWING"
+ and getattr(conn, "shadowing_awaiting_user", False)
+ )
+ if shadowing_listen:
+ from core.app_runtime.runtime import append_shadowing_listen_pcm
+
+ append_shadowing_listen_pcm(conn, pcm_frame)
+
+ # 璺熻鏁村彞褰曢煶璧� shadowing_listen_pcm銆俛sr_audio 浠嶆寜 VAD 瑁佸壀锛岄伩鍏嶈法鍙ョ矘杩炪��
if not audio_have_voice and not conn.client_have_voice:
conn.asr_audio = conn.asr_audio[-10:]
return
@@ -77,7 +86,11 @@
pcm_bytes = b"".join(conn.asr_audio)
# 妫�鏌ユ槸鍚︽湁瓒冲鐨勯煶棰戞暟鎹紙姣忓抚1920瀛楄妭锛�15甯х害28800瀛楄妭锛�
if len(pcm_bytes) > 1920 * 15:
- await self.handle_voice_stop(conn, [pcm_bytes])
+ mode = getattr(conn, "interaction_mode", "CHAT")
+ if mode == "SHADOWING":
+ asyncio.create_task(self.handle_voice_stop(conn, [pcm_bytes]))
+ else:
+ await self.handle_voice_stop(conn, [pcm_bytes])
conn.reset_audio_states()
# 澶勭悊璇煶鍋滄
@@ -163,10 +176,26 @@
text_len, _ = remove_punctuation_and_length(content_for_length_check)
self.stop_ws_connection()
+ audio_snapshot = asr_audio_task.copy() if asr_audio_task else []
+ mode = getattr(conn, "interaction_mode", "")
+ if mode == "SHADOWING":
+ from core.app_runtime.session import stash_asr_audio
+
+ stash_asr_audio(conn, audio_snapshot)
+
if text_len > 0:
- audio_snapshot = asr_audio_task.copy()
- enqueue_asr_report(conn, enhanced_text, audio_snapshot)
- # 浣跨敤鑷畾涔夋ā鍧楄繘琛屼笂鎶�
+ from core.app_runtime.session import should_report_asr_now, stash_asr_audio
+
+ if mode != "SHADOWING":
+ stash_asr_audio(conn, audio_snapshot)
+ if should_report_asr_now(conn):
+ try:
+ from core.audio_archive import archive_pcm_snapshot
+
+ archive_pcm_snapshot(conn, audio_snapshot)
+ except Exception:
+ pass
+ enqueue_asr_report(conn, enhanced_text, audio_snapshot)
await startToChat(conn, enhanced_text)
except Exception as e:
logger.bind(tag=TAG).error(f"澶勭悊璇煶鍋滄澶辫触: {e}")
--
Gitblit v1.9.1