彻底解决播放时回声录制问题
- 播放开始时立即停止当前录音 - 清空预录音缓冲区和录音数据 - 播放期间完全跳过音频处理 - 播放结束后重置状态并恢复监听 - 添加清晰的状态提示信息
This commit is contained in:
parent
48b99384b7
commit
e6341b8620
@ -169,6 +169,17 @@ class EnergyBasedRecorder:
|
|||||||
def play_audio(self, filename):
|
def play_audio(self, filename):
|
||||||
"""播放音频文件"""
|
"""播放音频文件"""
|
||||||
try:
|
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
|
self.is_playing = True
|
||||||
|
|
||||||
@ -198,6 +209,7 @@ class EnergyBasedRecorder:
|
|||||||
)
|
)
|
||||||
|
|
||||||
print(f"🔊 开始播放: {filename}")
|
print(f"🔊 开始播放: {filename}")
|
||||||
|
print("🚫 暂停录音处理,避免回声")
|
||||||
|
|
||||||
# 分块播放音频
|
# 分块播放音频
|
||||||
for chunk in frames:
|
for chunk in frames:
|
||||||
@ -207,6 +219,7 @@ class EnergyBasedRecorder:
|
|||||||
playback_stream.close()
|
playback_stream.close()
|
||||||
|
|
||||||
print("✅ 播放完成")
|
print("✅ 播放完成")
|
||||||
|
print("🔄 恢复录音监听")
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"❌ 播放失败: {e}")
|
print(f"❌ 播放失败: {e}")
|
||||||
@ -214,6 +227,8 @@ class EnergyBasedRecorder:
|
|||||||
finally:
|
finally:
|
||||||
# 恢复播放状态
|
# 恢复播放状态
|
||||||
self.is_playing = False
|
self.is_playing = False
|
||||||
|
# 重置状态,准备重新监听
|
||||||
|
self.energy_history = []
|
||||||
|
|
||||||
def play_with_system_player(self, filename):
|
def play_with_system_player(self, filename):
|
||||||
"""使用系统播放器播放音频"""
|
"""使用系统播放器播放音频"""
|
||||||
@ -332,7 +347,7 @@ class EnergyBasedRecorder:
|
|||||||
if len(data) == 0:
|
if len(data) == 0:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# 如果正在播放,跳过音频处理
|
# 如果正在播放,完全跳过音频处理
|
||||||
if self.is_playing:
|
if self.is_playing:
|
||||||
# 显示播放状态
|
# 显示播放状态
|
||||||
status = "🔊 播放中... 跳过录音处理"
|
status = "🔊 播放中... 跳过录音处理"
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user