From 8f48e9ac0c014567aa105098eb13c56955652810 Mon Sep 17 00:00:00 2001 From: hrz <1710360675@qq.com> Date: Fri, 30 May 2025 02:05:34 +0800 Subject: [PATCH] =?UTF-8?q?update:=E8=B0=83=E9=80=9A=E6=B5=81=E5=BC=8FASR?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main/xiaozhi-server/app.py | 10 +++++----- .../xiaozhi-server/core/providers/asr/base.py | 20 +++++++++---------- .../core/providers/asr/doubao.py | 2 +- 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/main/xiaozhi-server/app.py b/main/xiaozhi-server/app.py index 63849c58..1ae61cbb 100644 --- a/main/xiaozhi-server/app.py +++ b/main/xiaozhi-server/app.py @@ -1,13 +1,13 @@ -import asyncio import sys import signal +import asyncio +from aioconsole import ainput from config.settings import load_config -from core.websocket_server import WebSocketServer -from core.ota_server import SimpleOtaServer -from core.utils.util import check_ffmpeg_installed from config.logger import setup_logging from core.utils.util import get_local_ip -from aioconsole import ainput +from core.ota_server import SimpleOtaServer +from core.websocket_server import WebSocketServer +from core.utils.util import check_ffmpeg_installed TAG = __name__ logger = setup_logging() diff --git a/main/xiaozhi-server/core/providers/asr/base.py b/main/xiaozhi-server/core/providers/asr/base.py index d3ce5ee0..1a3a384d 100644 --- a/main/xiaozhi-server/core/providers/asr/base.py +++ b/main/xiaozhi-server/core/providers/asr/base.py @@ -38,34 +38,32 @@ class ASRProviderBase(ABC): else: have_voice = self.conn.client_have_voice # 如果本次没有声音,本段也没声音,就把声音丢弃了 + self.conn.asr_audio.append(audio) if have_voice == False and self.conn.client_have_voice == False: - self.conn.asr_audio.append(audio) self.conn.asr_audio = self.conn.asr_audio[-10:] return # 如果本段有声音,且已经停止了 if self.conn.client_voice_stop: + asr_audio_task = copy.deepcopy(self.conn.asr_audio) + self.conn.asr_audio.clear() self.conn.client_abort = False # 音频太短了,无法识别 - if len(self.conn.asr_audio) < 15: - self.conn.asr_audio.clear() - self.conn.reset_vad_states() - else: - await self.handle_voice_stop() + self.conn.reset_vad_states() + if len(asr_audio_task) > 15: + await self.handle_voice_stop(asr_audio_task) # 处理语音停止 - async def handle_voice_stop(self): + async def handle_voice_stop(self, asr_audio_task): raw_text, _ = await self.speech_to_text( - self.conn.asr_audio, self.conn.session_id + asr_audio_task, self.conn.session_id ) # 确保ASR模块返回原始文本 self.conn.logger.bind(tag=TAG).info(f"识别文本: {raw_text}") text_len, _ = remove_punctuation_and_length(raw_text) if text_len > 0: # 使用自定义模块进行上报 await startToChat(self.conn, raw_text) - enqueue_asr_report(self.conn, raw_text, copy.deepcopy(self.conn.asr_audio)) - self.conn.asr_audio.clear() - self.conn.reset_vad_states() + enqueue_asr_report(self.conn, raw_text, asr_audio_task) def save_audio_to_file(self, pcm_data: List[bytes], session_id: str) -> str: """PCM数据保存为WAV文件""" diff --git a/main/xiaozhi-server/core/providers/asr/doubao.py b/main/xiaozhi-server/core/providers/asr/doubao.py index d738f508..96abdff3 100644 --- a/main/xiaozhi-server/core/providers/asr/doubao.py +++ b/main/xiaozhi-server/core/providers/asr/doubao.py @@ -289,7 +289,7 @@ class ASRProvider(ASRProviderBase): for utterance in utterances: if utterance.get("definite", False): self.text = utterance["text"] - await self.handle_voice_stop() + await self.handle_voice_stop(None) break except websockets.ConnectionClosed: logger.bind(tag=TAG).debug("ASR服务连接已关闭,准备重连...")