#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 测试修复后的缓存播放功能 """ import os import sys import time # 添加项目路径 sys.path.append('.') def test_cache_playback_fixes(): """测试缓存播放修复""" print("🔧 测试缓存播放修复") print("=" * 40) from audio_processes import save_greeting_cache, greeting_cache_exists, load_cached_audio # 创建测试缓存 character_name = "测试角色" mock_audio = b"test_cached_audio_" * 100 # 约1.6KB print("📝 创建测试缓存...") save_greeting_cache(character_name, mock_audio) if greeting_cache_exists(character_name): print("✅ 缓存创建成功") # 模拟OutputProcess的修复逻辑 print("\n🎵 模拟修复后的缓存播放流程...") # 模拟状态变量 is_playing = False currently_playing = False preload_buffer = [] playback_buffer = [] preload_size = 3 last_playback_time = 0 playback_cooldown_period = 0.05 tts_generation_complete = False all_audio_received = False # 模拟加载缓存 cached_audio = load_cached_audio(character_name) if cached_audio: print(f"📁 缓存音频加载: {len(cached_audio)} 字节") # 添加到预加载缓冲区 preload_buffer.append(cached_audio) print(f"📦 添加到预加载缓冲区") # 应用修复后的逻辑 print("\n🔧 应用修复1: 设置TTS完成状态") tts_generation_complete = True print(f" tts_generation_complete = {tts_generation_complete}") print("🔧 应用修复2: 设置all_audio_received状态") all_audio_received = True print(f" all_audio_received = {all_audio_received}") print("🔧 应用修复3: 检查播放触发条件") if (not is_playing and len(preload_buffer) >= preload_size): print(" 🎵 条件1: 预加载完成播放") playback_buffer.extend(preload_buffer) preload_buffer.clear() is_playing = True last_playback_time = 0 # 修复: 避免冷却期 print(f" 📊 播放缓冲区: {len(playback_buffer)} 块") elif (not is_playing and len(preload_buffer) > 0): print(" 🎵 条件2: 强制播放缓存音频") playback_buffer.extend(preload_buffer) preload_buffer.clear() is_playing = True last_playback_time = 0 # 修复: 避免冷却期 print(f" 📊 播放缓冲区: {len(playback_buffer)} 块") # 模拟播放冷却检查 print("\n🔧 检查播放冷却机制...") current_time = time.time() time_since_last_play = current_time - last_playback_time in_cooldown = (last_playback_time > 0 and time_since_last_play < playback_cooldown_period) print(f" time_since_last_play = {time_since_last_play}") print(f" playback_cooldown_period = {playback_cooldown_period}") print(f" in_cooldown = {in_cooldown}") if not in_cooldown: print(" ✅ 无冷却期限制,可以播放") currently_playing = True print(" 🎧 开始播放音频...") else: print(" ❌ 仍在冷却期内,跳过播放") # 模拟播放完成检测 print("\n🔧 检查播放完成条件...") conditions_met = ( tts_generation_complete and # TTS生成完成 all_audio_received and # 所有音频已接收 len(preload_buffer) == 0 and # 预加载缓冲区为空 len(playback_buffer) == 0 and # 播放缓冲区为空 not currently_playing # 当前没有在播放 ) print(f" tts_generation_complete = {tts_generation_complete}") print(f" all_audio_received = {all_audio_received}") print(f" preload_buffer_empty = {len(preload_buffer) == 0}") print(f" playback_buffer_empty = {len(playback_buffer) == 0}") print(f" not_currently_playing = {not currently_playing}") print(f" conditions_met = {conditions_met}") if conditions_met: print(" ✅ 播放完成条件满足") else: print(" ⏳ 等待播放完成") else: print("❌ 缓存创建失败") def test_key_fixes(): """测试关键修复点""" print("\n🔍 测试关键修复点") print("=" * 30) print("✅ 修复1: 播放冷却问题") print(" - 将 last_playback_time 设置为 0") print(" - 避免立即触发冷却期") print("\n✅ 修复2: all_audio_received 状态") print(" - 缓存音频立即设置为 True") print(" - 避免系统无限等待") print("\n✅ 修复3: 播放触发逻辑") print(" - 强制播放机制") print(" - 确保缓存音频能正常播放") def cleanup(): """清理测试文件""" print("\n🧹 清理测试文件") from audio_processes import get_greeting_cache_path cache_path = get_greeting_cache_path("测试角色") if os.path.exists(cache_path): try: os.remove(cache_path) print(" ✅ 测试缓存已删除") except Exception as e: print(f" ❌ 删除失败: {e}") if __name__ == "__main__": print("🚀 开始测试修复后的缓存播放功能") try: # 测试缓存播放修复 test_cache_playback_fixes() # 测试关键修复点 test_key_fixes() print("\n🎉 修复测试完成!") except Exception as e: print(f"\n❌ 测试过程中出错: {e}") import traceback traceback.print_exc() finally: # 清理测试文件 cleanup()