fix:修复阿里云流式ASR音频传递问题

This commit is contained in:
3030332422
2025-07-19 18:17:21 +08:00
parent 6d5b53fcd5
commit b8136ac1dc
@@ -120,6 +120,14 @@ class ASRProvider(ASRProviderBase):
await super().open_audio_channels(conn)
async def receive_audio(self, conn, audio, audio_have_voice):
# 初始化音频缓存
if not hasattr(conn, 'asr_audio_for_voiceprint'):
conn.asr_audio_for_voiceprint = []
# 存储音频数据
if audio:
conn.asr_audio_for_voiceprint.append(audio)
conn.asr_audio.append(audio)
conn.asr_audio = conn.asr_audio[-10:]
@@ -129,7 +137,7 @@ class ASRProvider(ASRProviderBase):
await self._start_recognition(conn)
except Exception as e:
logger.bind(tag=TAG).error(f"开始识别失败: {str(e)}")
await self._cleanup()
await self._cleanup(conn)
return
if self.asr_ws and self.is_processing and self.server_ready:
@@ -138,7 +146,7 @@ class ASRProvider(ASRProviderBase):
await self.asr_ws.send(pcm_frame)
except Exception as e:
logger.bind(tag=TAG).warning(f"发送音频失败: {str(e)}")
await self._cleanup()
await self._cleanup(conn)
async def _start_recognition(self, conn):
"""开始识别会话"""
@@ -235,7 +243,11 @@ class ASRProvider(ASRProviderBase):
if text:
self.text = text
conn.reset_vad_states()
await self.handle_voice_stop(conn, None)
# 传递缓存的音频数据
audio_data = getattr(conn, 'asr_audio_for_voiceprint', [])
await self.handle_voice_stop(conn, audio_data)
# 清空缓存
conn.asr_audio_for_voiceprint = []
break
elif message_name == "TranscriptionCompleted":
# 识别完成
@@ -253,12 +265,16 @@ class ASRProvider(ASRProviderBase):
except Exception as e:
logger.bind(tag=TAG).error(f"结果转发失败: {str(e)}")
finally:
await self._cleanup()
await self._cleanup(conn)
async def _cleanup(self):
async def _cleanup(self, conn):
"""清理资源"""
logger.bind(tag=TAG).info(f"开始ASR会话清理 | 当前状态: processing={self.is_processing}, server_ready={self.server_ready}")
# 清理连接的音频缓存
if conn and hasattr(conn, 'asr_audio_for_voiceprint'):
conn.asr_audio_for_voiceprint = []
# 判断是否需要发送终止请求
should_stop = self.is_processing or self.server_ready