彻底解决播放时回声录制问题

- 播放开始时立即停止当前录音
- 清空预录音缓冲区和录音数据
- 播放期间完全跳过音频处理
- 播放结束后重置状态并恢复监听
- 添加清晰的状态提示信息
This commit is contained in:
朱潮 2025-09-20 12:15:04 +08:00
parent 48b99384b7
commit e6341b8620

View File

@ -169,6 +169,17 @@ class EnergyBasedRecorder:
def play_audio(self, filename):
"""播放音频文件"""
try:
# 立即停止当前录音并清空缓冲区
if self.recording:
print("🔇 播放开始,停止当前录音")
self.recording = False
self.recorded_frames = []
self.recording_start_time = None
self.last_sound_time = None
# 清空预录音缓冲区,避免录制播放的音频
self.pre_record_buffer = []
# 设置播放状态
self.is_playing = True
@ -198,6 +209,7 @@ class EnergyBasedRecorder:
)
print(f"🔊 开始播放: {filename}")
print("🚫 暂停录音处理,避免回声")
# 分块播放音频
for chunk in frames:
@ -207,6 +219,7 @@ class EnergyBasedRecorder:
playback_stream.close()
print("✅ 播放完成")
print("🔄 恢复录音监听")
except Exception as e:
print(f"❌ 播放失败: {e}")
@ -214,6 +227,8 @@ class EnergyBasedRecorder:
finally:
# 恢复播放状态
self.is_playing = False
# 重置状态,准备重新监听
self.energy_history = []
def play_with_system_player(self, filename):
"""使用系统播放器播放音频"""
@ -332,7 +347,7 @@ class EnergyBasedRecorder:
if len(data) == 0:
continue
# 如果正在播放,跳过音频处理
# 如果正在播放,完全跳过音频处理
if self.is_playing:
# 显示播放状态
status = "🔊 播放中... 跳过录音处理"