mirror of
https://github.com/xinnan-tech/xiaozhi-esp32-server.git
synced 2026-07-27 17:43:55 +08:00
update:优化代码
This commit is contained in:
@@ -94,9 +94,12 @@ def opus_to_wav(conn, opus_data):
|
|||||||
# 返回完整的WAV数据
|
# 返回完整的WAV数据
|
||||||
return bytes(wav_header) + pcm_data_bytes
|
return bytes(wav_header) + pcm_data_bytes
|
||||||
finally:
|
finally:
|
||||||
if decoder:
|
if decoder is not None:
|
||||||
del decoder
|
try:
|
||||||
gc.collect()
|
del decoder
|
||||||
|
gc.collect()
|
||||||
|
except Exception as e:
|
||||||
|
conn.logger.bind(tag=TAG).debug(f"释放decoder资源时出错: {e}")
|
||||||
|
|
||||||
|
|
||||||
def enqueue_tts_report(conn, text, opus_data):
|
def enqueue_tts_report(conn, text, opus_data):
|
||||||
|
|||||||
@@ -349,6 +349,11 @@ class ASRProvider(ASRProviderBase):
|
|||||||
async def close(self):
|
async def close(self):
|
||||||
"""关闭资源"""
|
"""关闭资源"""
|
||||||
await self._cleanup(None)
|
await self._cleanup(None)
|
||||||
if hasattr(self, 'decoder'):
|
if hasattr(self, 'decoder') and self.decoder is not None:
|
||||||
del self.decoder
|
try:
|
||||||
gc.collect()
|
del self.decoder
|
||||||
|
self.decoder = None
|
||||||
|
gc.collect()
|
||||||
|
logger.bind(tag=TAG).debug("Aliyun decoder resources released")
|
||||||
|
except Exception as e:
|
||||||
|
logger.bind(tag=TAG).debug(f"释放Aliyun decoder资源时出错: {e}")
|
||||||
|
|||||||
@@ -268,6 +268,9 @@ class ASRProviderBase(ABC):
|
|||||||
logger.bind(tag=TAG).error(f"音频解码过程发生错误: {e}")
|
logger.bind(tag=TAG).error(f"音频解码过程发生错误: {e}")
|
||||||
return []
|
return []
|
||||||
finally:
|
finally:
|
||||||
if decoder:
|
if decoder is not None:
|
||||||
del decoder
|
try:
|
||||||
gc.collect()
|
del decoder
|
||||||
|
gc.collect()
|
||||||
|
except Exception as e:
|
||||||
|
logger.bind(tag=TAG).debug(f"释放decoder资源时出错: {e}")
|
||||||
|
|||||||
@@ -373,14 +373,14 @@ class ASRProvider(ASRProviderBase):
|
|||||||
self.is_processing = False
|
self.is_processing = False
|
||||||
|
|
||||||
# 显式释放decoder资源
|
# 显式释放decoder资源
|
||||||
if hasattr(self, 'decoder') and self.decoder:
|
if hasattr(self, 'decoder') and self.decoder is not None:
|
||||||
try:
|
try:
|
||||||
del self.decoder
|
del self.decoder
|
||||||
self.decoder = None
|
self.decoder = None
|
||||||
gc.collect()
|
gc.collect()
|
||||||
logger.bind(tag=TAG).info("Doubao decoder resources released")
|
logger.bind(tag=TAG).debug("Doubao decoder resources released")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.bind(tag=TAG).error(f"Error releasing Doubao decoder: {e}")
|
logger.bind(tag=TAG).debug(f"释放Doubao decoder资源时出错: {e}")
|
||||||
|
|
||||||
# 清理所有连接的音频缓冲区
|
# 清理所有连接的音频缓冲区
|
||||||
if hasattr(self, '_connections'):
|
if hasattr(self, '_connections'):
|
||||||
|
|||||||
@@ -515,14 +515,14 @@ class ASRProvider(ASRProviderBase):
|
|||||||
self.is_processing = False
|
self.is_processing = False
|
||||||
|
|
||||||
# 显式释放decoder资源
|
# 显式释放decoder资源
|
||||||
if hasattr(self, 'decoder') and self.decoder:
|
if hasattr(self, 'decoder') and self.decoder is not None:
|
||||||
try:
|
try:
|
||||||
del self.decoder
|
del self.decoder
|
||||||
self.decoder = None
|
self.decoder = None
|
||||||
gc.collect()
|
gc.collect()
|
||||||
logger.bind(tag=TAG).info("Xunfei decoder resources released")
|
logger.bind(tag=TAG).debug("Xunfei decoder resources released")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.bind(tag=TAG).error(f"Error releasing Xunfei decoder: {e}")
|
logger.bind(tag=TAG).debug(f"释放Xunfei decoder资源时出错: {e}")
|
||||||
|
|
||||||
# 清理所有连接的音频缓冲区
|
# 清理所有连接的音频缓冲区
|
||||||
if hasattr(self, "_connections"):
|
if hasattr(self, "_connections"):
|
||||||
|
|||||||
@@ -38,9 +38,12 @@ class VADProvider(VADProviderBase):
|
|||||||
self.frame_window_threshold = 3
|
self.frame_window_threshold = 3
|
||||||
|
|
||||||
def __del__(self):
|
def __del__(self):
|
||||||
if hasattr(self, 'decoder'):
|
if hasattr(self, 'decoder') and self.decoder is not None:
|
||||||
del self.decoder
|
try:
|
||||||
gc.collect()
|
del self.decoder
|
||||||
|
gc.collect()
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
def is_vad(self, conn, opus_packet):
|
def is_vad(self, conn, opus_packet):
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -395,8 +395,12 @@ def opus_datas_to_wav_bytes(opus_datas, sample_rate=16000, channels=1):
|
|||||||
wf.writeframes(pcm_bytes)
|
wf.writeframes(pcm_bytes)
|
||||||
return wav_buffer.getvalue()
|
return wav_buffer.getvalue()
|
||||||
finally:
|
finally:
|
||||||
del decoder
|
if decoder is not None:
|
||||||
gc.collect()
|
try:
|
||||||
|
del decoder
|
||||||
|
gc.collect()
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
def check_vad_update(before_config, new_config):
|
def check_vad_update(before_config, new_config):
|
||||||
|
|||||||
Reference in New Issue
Block a user