mirror of
https://github.com/xinnan-tech/xiaozhi-esp32-server.git
synced 2026-07-26 00:53:54 +08:00
Merge pull request #3235 from xinnan-tech/py-fix-tts
fix: 超时情况不与activate_session同一判断条件导致的监听任务未清除问题
This commit is contained in:
@@ -80,6 +80,9 @@ class TTSProvider(TTSProviderBase):
|
|||||||
return self.ws
|
return self.ws
|
||||||
logger.bind(tag=TAG).debug("开始建立新连接...")
|
logger.bind(tag=TAG).debug("开始建立新连接...")
|
||||||
|
|
||||||
|
# 建立新连接前取消旧监听任务
|
||||||
|
await self._cancel_monitor_task()
|
||||||
|
|
||||||
self.ws = await websockets.connect(
|
self.ws = await websockets.connect(
|
||||||
self.ws_url,
|
self.ws_url,
|
||||||
additional_headers=self.header,
|
additional_headers=self.header,
|
||||||
@@ -306,16 +309,7 @@ class TTSProvider(TTSProviderBase):
|
|||||||
"""清理资源"""
|
"""清理资源"""
|
||||||
await super().close()
|
await super().close()
|
||||||
self.activate_session = False
|
self.activate_session = False
|
||||||
# 取消监听任务
|
await self._cancel_monitor_task()
|
||||||
if self._monitor_task:
|
|
||||||
try:
|
|
||||||
self._monitor_task.cancel()
|
|
||||||
await self._monitor_task
|
|
||||||
except asyncio.CancelledError:
|
|
||||||
pass
|
|
||||||
except Exception as e:
|
|
||||||
logger.bind(tag=TAG).warning(f"关闭时取消监听任务错误: {e}")
|
|
||||||
self._monitor_task = None
|
|
||||||
|
|
||||||
# 关闭WebSocket连接
|
# 关闭WebSocket连接
|
||||||
if self.ws:
|
if self.ws:
|
||||||
@@ -325,6 +319,18 @@ class TTSProvider(TTSProviderBase):
|
|||||||
pass
|
pass
|
||||||
self.ws = None
|
self.ws = None
|
||||||
self.last_active_time = None
|
self.last_active_time = None
|
||||||
|
|
||||||
|
async def _cancel_monitor_task(self):
|
||||||
|
"""取消监听任务"""
|
||||||
|
if self._monitor_task and not self._monitor_task.done():
|
||||||
|
self._monitor_task.cancel()
|
||||||
|
try:
|
||||||
|
await self._monitor_task
|
||||||
|
except asyncio.CancelledError:
|
||||||
|
pass
|
||||||
|
except Exception as e:
|
||||||
|
logger.bind(tag=TAG).warning(f"取消监听任务错误: {e}")
|
||||||
|
self._monitor_task = None
|
||||||
|
|
||||||
async def _start_monitor_tts_response(self):
|
async def _start_monitor_tts_response(self):
|
||||||
"""监听TTS响应 - 长期运行"""
|
"""监听TTS响应 - 长期运行"""
|
||||||
|
|||||||
@@ -193,6 +193,9 @@ class TTSProvider(TTSProviderBase):
|
|||||||
return self.ws
|
return self.ws
|
||||||
logger.bind(tag=TAG).debug("开始建立新连接...")
|
logger.bind(tag=TAG).debug("开始建立新连接...")
|
||||||
|
|
||||||
|
# 建立新连接前取消旧监听任务
|
||||||
|
await self._cancel_monitor_task()
|
||||||
|
|
||||||
self.ws = await websockets.connect(
|
self.ws = await websockets.connect(
|
||||||
self.ws_url,
|
self.ws_url,
|
||||||
additional_headers={"X-NLS-Token": self.token},
|
additional_headers={"X-NLS-Token": self.token},
|
||||||
@@ -401,15 +404,7 @@ class TTSProvider(TTSProviderBase):
|
|||||||
"""资源清理"""
|
"""资源清理"""
|
||||||
await super().close()
|
await super().close()
|
||||||
self.activate_session = False
|
self.activate_session = False
|
||||||
if self._monitor_task:
|
await self._cancel_monitor_task()
|
||||||
try:
|
|
||||||
self._monitor_task.cancel()
|
|
||||||
await self._monitor_task
|
|
||||||
except asyncio.CancelledError:
|
|
||||||
pass
|
|
||||||
except Exception as e:
|
|
||||||
logger.bind(tag=TAG).warning(f"关闭时取消监听任务错误: {e}")
|
|
||||||
self._monitor_task = None
|
|
||||||
|
|
||||||
if self.ws:
|
if self.ws:
|
||||||
try:
|
try:
|
||||||
@@ -504,6 +499,18 @@ class TTSProvider(TTSProviderBase):
|
|||||||
opus_encoder=None,
|
opus_encoder=None,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
async def _cancel_monitor_task(self):
|
||||||
|
"""取消监听任务"""
|
||||||
|
if self._monitor_task and not self._monitor_task.done():
|
||||||
|
self._monitor_task.cancel()
|
||||||
|
try:
|
||||||
|
await self._monitor_task
|
||||||
|
except asyncio.CancelledError:
|
||||||
|
pass
|
||||||
|
except Exception as e:
|
||||||
|
logger.bind(tag=TAG).warning(f"取消监听任务错误: {e}")
|
||||||
|
self._monitor_task = None
|
||||||
|
|
||||||
def to_tts(self, text: str) -> list:
|
def to_tts(self, text: str) -> list:
|
||||||
"""非流式TTS处理,用于测试及保存音频文件的场景"""
|
"""非流式TTS处理,用于测试及保存音频文件的场景"""
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -229,6 +229,10 @@ class TTSProvider(TTSProviderBase):
|
|||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
logger.bind(tag=TAG).debug("开始建立新连接...")
|
logger.bind(tag=TAG).debug("开始建立新连接...")
|
||||||
|
|
||||||
|
# 建立新连接前取消旧监听任务
|
||||||
|
await self._cancel_monitor_task()
|
||||||
|
|
||||||
ws_header = {
|
ws_header = {
|
||||||
"X-Api-App-Key": self.appId,
|
"X-Api-App-Key": self.appId,
|
||||||
"X-Api-Access-Key": self.access_token,
|
"X-Api-Access-Key": self.access_token,
|
||||||
@@ -472,16 +476,7 @@ class TTSProvider(TTSProviderBase):
|
|||||||
"""资源清理方法"""
|
"""资源清理方法"""
|
||||||
await super().close()
|
await super().close()
|
||||||
self.activate_session = False
|
self.activate_session = False
|
||||||
# 取消监听任务
|
await self._cancel_monitor_task()
|
||||||
if self._monitor_task:
|
|
||||||
try:
|
|
||||||
self._monitor_task.cancel()
|
|
||||||
await self._monitor_task
|
|
||||||
except asyncio.CancelledError:
|
|
||||||
pass
|
|
||||||
except Exception as e:
|
|
||||||
logger.bind(tag=TAG).warning(f"关闭时取消监听任务错误: {e}")
|
|
||||||
self._monitor_task = None
|
|
||||||
|
|
||||||
if self.ws:
|
if self.ws:
|
||||||
try:
|
try:
|
||||||
@@ -731,6 +726,18 @@ class TTSProvider(TTSProviderBase):
|
|||||||
def wav_to_opus_data_audio_raw_stream(self, raw_data_var, is_end=False, callback: Callable[[Any], Any]=None):
|
def wav_to_opus_data_audio_raw_stream(self, raw_data_var, is_end=False, callback: Callable[[Any], Any]=None):
|
||||||
return self.opus_encoder.encode_pcm_to_opus_stream(raw_data_var, is_end, callback=callback)
|
return self.opus_encoder.encode_pcm_to_opus_stream(raw_data_var, is_end, callback=callback)
|
||||||
|
|
||||||
|
async def _cancel_monitor_task(self):
|
||||||
|
"""取消监听任务"""
|
||||||
|
if self._monitor_task and not self._monitor_task.done():
|
||||||
|
self._monitor_task.cancel()
|
||||||
|
try:
|
||||||
|
await self._monitor_task
|
||||||
|
except asyncio.CancelledError:
|
||||||
|
pass
|
||||||
|
except Exception as e:
|
||||||
|
logger.bind(tag=TAG).warning(f"取消监听任务错误: {e}")
|
||||||
|
self._monitor_task = None
|
||||||
|
|
||||||
def to_tts(self, text: str) -> list:
|
def to_tts(self, text: str) -> list:
|
||||||
"""非流式生成音频数据,用于生成音频及测试场景
|
"""非流式生成音频数据,用于生成音频及测试场景
|
||||||
Args:
|
Args:
|
||||||
|
|||||||
Reference in New Issue
Block a user