From e6341b86201e2cca81b64a6eab22358b6efb0473 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E6=BD=AE?= Date: Sat, 20 Sep 2025 12:15:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BD=BB=E5=BA=95=E8=A7=A3=E5=86=B3=E6=92=AD?= =?UTF-8?q?=E6=94=BE=E6=97=B6=E5=9B=9E=E5=A3=B0=E5=BD=95=E5=88=B6=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 播放开始时立即停止当前录音 - 清空预录音缓冲区和录音数据 - 播放期间完全跳过音频处理 - 播放结束后重置状态并恢复监听 - 添加清晰的状态提示信息 --- energy_based_recorder.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/energy_based_recorder.py b/energy_based_recorder.py index d5358ef..96d438f 100644 --- a/energy_based_recorder.py +++ b/energy_based_recorder.py @@ -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 = "🔊 播放中... 跳过录音处理"