Local-Voice/test_cached_timing_fix.py
2025-09-25 11:25:16 +08:00

91 lines
3.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
测试缓存音频时序修复
"""
import sys
import os
import time
sys.path.append(os.path.dirname(__file__))
from audio_processes import OutputProcess
import multiprocessing as mp
def test_cached_audio_timing():
"""测试缓存音频时序修复"""
print("🧪 开始测试缓存音频时序修复...")
# 创建测试队列
audio_queue = mp.Queue(maxsize=100)
event_queue = mp.Queue(maxsize=100)
# 创建输出进程实例
config = {
'buffer_size': 1000,
'show_progress': True,
'progress_interval': 100,
'tts_speaker': 'zh_female_wanqudashu_moon_bigtts'
}
output_process = OutputProcess(audio_queue, config, event_queue)
# 测试1: 检查关键时序变量
print("\n📋 测试1: 检查关键时序变量")
assert hasattr(output_process, 'last_audio_chunk_time'), "缺少 last_audio_chunk_time 变量"
assert hasattr(output_process, 'all_audio_received'), "缺少 all_audio_received 变量"
print(f"✅ 初始 last_audio_chunk_time: {output_process.last_audio_chunk_time}")
print(f"✅ 初始 all_audio_received: {output_process.all_audio_received}")
# 测试2: 模拟缓存音频处理前的状态
print("\n📋 测试2: 检查初始状态")
initial_time = output_process.last_audio_chunk_time
print(f"✅ 初始时间戳: {initial_time}")
# 测试3: 验证我们的修复逻辑
print("\n📋 测试3: 验证修复逻辑")
# 模拟设置时序变量(这是我们的修复核心)
test_time = time.time()
output_process.last_audio_chunk_time = test_time
output_process.all_audio_received = True
print(f"✅ 设置后 last_audio_chunk_time: {output_process.last_audio_chunk_time}")
print(f"✅ 设置后 all_audio_received: {output_process.all_audio_received}")
# 验证时间差计算
time_diff = time.time() - output_process.last_audio_chunk_time
print(f"✅ 时间差计算: {time_diff:.3f}应该接近0")
# 测试4: 检查是否会有异常的时间差(修复前的问题)
print("\n📋 测试4: 检查异常时间差问题")
# 模拟修复前的问题last_audio_chunk_time为0或很老的时间
old_time = output_process.last_audio_chunk_time
output_process.last_audio_chunk_time = 0 # 模拟未初始化的情况
# 模拟播放完成检测逻辑
if output_process.last_audio_chunk_time > 0:
time_since_last = time.time() - output_process.last_audio_chunk_time
print(f"⚠️ 时间差: {time_since_last:.3f}")
else:
print("⚠️ last_audio_chunk_time未设置这会导致立即完成")
# 恢复正确的时间
output_process.last_audio_chunk_time = old_time
print("\n🎉 时序修复验证完成!")
print("📝 修复要点:")
print(" 1. 在缓存音频开始播放时设置last_audio_chunk_time")
print(" 2. 确保all_audio_received在适当时机设置")
print(" 3. 避免出现49.292秒的异常时间差")
# 清理
output_process.running = False
time.sleep(0.1) # 给线程时间清理
return True
if __name__ == "__main__":
test_cached_audio_timing()