91 lines
3.2 KiB
Python
91 lines
3.2 KiB
Python
#!/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() |