修复无声音导致的 all_audio_received问题

This commit is contained in:
朱潮 2025-09-23 14:14:41 +08:00
parent 01d55be032
commit 997691cc2b

View File

@ -7,24 +7,26 @@
使用增强版语音检测器 使用增强版语音检测器
""" """
import base64
import gzip
import json
import multiprocessing as mp import multiprocessing as mp
import os
import queue import queue
import time
import threading import threading
import time
import wave
from dataclasses import dataclass
from enum import Enum
from typing import Any, Dict, List, Optional
import numpy as np import numpy as np
import pyaudio import pyaudio
from enum import Enum import requests
from dataclasses import dataclass
from typing import Optional, List, Dict, Any
import json
import wave
import os
from enhanced_voice_detector import EnhancedVoiceDetector from enhanced_voice_detector import EnhancedVoiceDetector
from process_logger import ProcessLogger from process_logger import ProcessLogger
import requests
import base64
import gzip
class RecordingState(Enum): class RecordingState(Enum):
"""录音状态枚举""" """录音状态枚举"""
@ -1437,7 +1439,7 @@ class OutputProcess:
if not self.end_signal_received: if not self.end_signal_received:
return False return False
print(f"🔍 增强播放完成检查开始...") # print(f"🔍 增强播放完成检查开始...")
# 更新状态变量 # 更新状态变量
self.pre_buffer_empty = (len(self.preload_buffer) == 0) self.pre_buffer_empty = (len(self.preload_buffer) == 0)
@ -1450,19 +1452,19 @@ class OutputProcess:
current_time = time.time() current_time = time.time()
time_since_last_chunk = current_time - self.last_audio_chunk_time time_since_last_chunk = current_time - self.last_audio_chunk_time
print(f"🔍 增强播放完成检查详情:") # print(f"🔍 增强播放完成检查详情:")
print(f" - end_signal_received: {self.end_signal_received}") # print(f" - end_signal_received: {self.end_signal_received}")
print(f" - llm_generation_complete: {self.llm_generation_complete}") # print(f" - llm_generation_complete: {self.llm_generation_complete}")
print(f" - tts_generation_complete: {self.tts_generation_complete}") # print(f" - tts_generation_complete: {self.tts_generation_complete}")
print(f" - all_audio_received: {self.all_audio_received}") # print(f" - all_audio_received: {self.all_audio_received}")
print(f" - tts_queue_size: {tts_queue_size}") # print(f" - tts_queue_size: {tts_queue_size}")
print(f" - tts_buffer_size: {len(self.tts_buffer)}") # print(f" - tts_buffer_size: {len(self.tts_buffer)}")
print(f" - playback_buffer: {len(self.playback_buffer)}") # print(f" - playback_buffer: {len(self.playback_buffer)}")
print(f" - preload_buffer: {len(self.preload_buffer)}") # print(f" - preload_buffer: {len(self.preload_buffer)}")
print(f" - currently_playing: {self.currently_playing}") # print(f" - currently_playing: {self.currently_playing}")
print(f" - is_playing: {self.is_playing}") # print(f" - is_playing: {self.is_playing}")
print(f" - last_audio_chunk_time: {self.last_audio_chunk_time}") # print(f" - last_audio_chunk_time: {self.last_audio_chunk_time}")
print(f" - time_since_last_chunk: {time_since_last_chunk:.3f}") # print(f" - time_since_last_chunk: {time_since_last_chunk:.3f}秒")
# 检查TTS是否正在生成 - 移除自动修正逻辑 # 检查TTS是否正在生成 - 移除自动修正逻辑
@ -1470,10 +1472,10 @@ class OutputProcess:
# TTS正在生成的条件队列中有任务 或 还有待处理的缓冲区内容 或 TTS生成未完成 # TTS正在生成的条件队列中有任务 或 还有待处理的缓冲区内容 或 TTS生成未完成
tts_is_generating = (tts_queue_size > 0 or len(self.tts_buffer) > 0 or not self.tts_generation_complete) tts_is_generating = (tts_queue_size > 0 or len(self.tts_buffer) > 0 or not self.tts_generation_complete)
print(f" - tts_is_generating: {tts_is_generating}") # print(f" - tts_is_generating: {tts_is_generating}")
print(f" - pre_buffer_empty: {self.pre_buffer_empty}") # print(f" - pre_buffer_empty: {self.pre_buffer_empty}")
print(f" - playback_buffer_empty: {self.playback_buffer_empty}") # print(f" - playback_buffer_empty: {self.playback_buffer_empty}")
print(f" - no_active_playback: {self.no_active_playback}") # print(f" - no_active_playback: {self.no_active_playback}")
# 特殊处理1如果没有任何音频数据暂时不设置all_audio_received等待TTS生成 # 特殊处理1如果没有任何音频数据暂时不设置all_audio_received等待TTS生成
# 注意这里不自动设置all_audio_received因为可能TTS还在生成中 # 注意这里不自动设置all_audio_received因为可能TTS还在生成中
@ -1481,15 +1483,15 @@ class OutputProcess:
# 特殊处理2如果all_audio_received为False但其他条件都满足强制设置为True # 特殊处理2如果all_audio_received为False但其他条件都满足强制设置为True
# 移除自动修正all_audio_received的逻辑等待真正的音频数据 # 移除自动修正all_audio_received的逻辑等待真正的音频数据
print(f"🔍 播放状态检查(移除自动修正机制):") # print(f"🔍 播放状态检查(移除自动修正机制):")
print(f" - llm_generation_complete: {self.llm_generation_complete}") # print(f" - llm_generation_complete: {self.llm_generation_complete}")
print(f" - tts_generation_complete: {self.tts_generation_complete}") # print(f" - tts_generation_complete: {self.tts_generation_complete}")
print(f" - all_audio_received: {self.all_audio_received}") # print(f" - all_audio_received: {self.all_audio_received}")
print(f" - pre_buffer_empty: {self.pre_buffer_empty}") # print(f" - pre_buffer_empty: {self.pre_buffer_empty}")
print(f" - playback_buffer_empty: {self.playback_buffer_empty}") # print(f" - playback_buffer_empty: {self.playback_buffer_empty}")
print(f" - no_active_playback: {self.no_active_playback}") # print(f" - no_active_playback: {self.no_active_playback}")
print(f" - tts_queue_size == 0: {tts_queue_size == 0}") # print(f" - tts_queue_size == 0: {tts_queue_size == 0}")
print(f" - not tts_is_generating: {not tts_is_generating}") # print(f" - not tts_is_generating: {not tts_is_generating}")
# 检查是否所有条件都满足 - 使用更新的状态变量添加TTS生成状态检查 # 检查是否所有条件都满足 - 使用更新的状态变量添加TTS生成状态检查
all_conditions_met = ( all_conditions_met = (
@ -1503,17 +1505,17 @@ class OutputProcess:
not tts_is_generating # 新增确保TTS不在生成中 not tts_is_generating # 新增确保TTS不在生成中
) )
print(f"🔍 最终条件检查结果:") # print(f"🔍 最终条件检查结果:")
print(f" - all_conditions_met: {all_conditions_met}") # print(f" - all_conditions_met: {all_conditions_met}")
print(f" - 各个条件详情:") # print(f" - 各个条件详情:")
print(f" * llm_generation_complete: {self.llm_generation_complete}") # print(f" * llm_generation_complete: {self.llm_generation_complete}")
print(f" * tts_generation_complete: {self.tts_generation_complete}") # print(f" * tts_generation_complete: {self.tts_generation_complete}")
print(f" * all_audio_received: {self.all_audio_received}") # print(f" * all_audio_received: {self.all_audio_received}")
print(f" * pre_buffer_empty: {self.pre_buffer_empty}") # print(f" * pre_buffer_empty: {self.pre_buffer_empty}")
print(f" * playback_buffer_empty: {self.playback_buffer_empty}") # print(f" * playback_buffer_empty: {self.playback_buffer_empty}")
print(f" * no_active_playback: {self.no_active_playback}") # print(f" * no_active_playback: {self.no_active_playback}")
print(f" * tts_queue_size == 0: {tts_queue_size == 0}") # print(f" * tts_queue_size == 0: {tts_queue_size == 0}")
print(f" * not tts_is_generating: {not tts_is_generating}") # print(f" * not tts_is_generating: {not tts_is_generating}")
if all_conditions_met: if all_conditions_met:
print(f"✅ 所有播放完成条件已满足,进行时间检查...") print(f"✅ 所有播放完成条件已满足,进行时间检查...")
@ -2060,7 +2062,7 @@ class OutputProcess:
def _filter_parentheses_content(self, text): def _filter_parentheses_content(self, text):
"""过滤文本中的括号内容(包括中文和英文括号)- 从 recorder.py 移植""" """过滤文本中的括号内容(包括中文和英文括号)- 从 recorder.py 移植"""
import re import re
# 移除中文括号内容:(内容) # 移除中文括号内容:(内容)
filtered_text = re.sub(r'[^]*', '', text) filtered_text = re.sub(r'[^]*', '', text)
# 移除英文括号内容:(content) # 移除英文括号内容:(content)
@ -2180,4 +2182,4 @@ class OutputProcess:
if __name__ == "__main__": if __name__ == "__main__":
# 测试代码 # 测试代码
print("音频进程模块测试") print("音频进程模块测试")
print("这个模块应该在多进程环境中运行") print("这个模块应该在多进程环境中运行")