""" 快速测试 Kokoro TTS 模型是否可用 """ import sys import asyncio from pathlib import Path # 添加项目路径 sys.path.insert(0, str(Path(__file__).parent)) async def test_kokoro(): """测试 Kokoro TTS""" print("=" * 60) print(" Kokoro TTS 模型验证测试") print("=" * 60) print() # 检查模型文件 model_dir = Path("models/Kokoro-82M-v1.1-zh-ONNX") print(f"1. 检查模型目录: {model_dir}") if not model_dir.exists(): print(f" ❌ 目录不存在") return False print(f" ✓ 目录存在") # 检查 ONNX 模型 onnx_files = list((model_dir / "onnx").glob("model*.onnx")) print(f"\n2. 检查 ONNX 模型:") if not onnx_files: print(f" ❌ 未找到 ONNX 模型") return False for f in onnx_files: size_mb = f.stat().st_size / 1024 / 1024 print(f" ✓ {f.name} ({size_mb:.1f} MB)") # 检查 tokenizer tokenizer = model_dir / "tokenizer.json" print(f"\n3. 检查 tokenizer:") if not tokenizer.exists(): print(f" ❌ tokenizer.json 不存在") return False print(f" ✓ tokenizer.json 存在") # 检查语音文件 voices_dir = model_dir / "voices" print(f"\n4. 检查语音文件:") if not voices_dir.exists(): print(f" ❌ voices 目录不存在") return False voice_files = list(voices_dir.glob("*.bin")) print(f" ✓ 找到 {len(voice_files)} 个语音文件") print(f" 示例: {[f.stem for f in voice_files[:5]]}") # 初始化 Kokoro TTS print(f"\n5. 初始化 Kokoro TTS 服务...") try: from app.providers.kokoro_tts import KokoroTTSService tts = KokoroTTSService() success = await tts.initialize() if not success: print(f" ❌ 初始化失败") return False print(f" ✓ 初始化成功") # 测试合成 print(f"\n6. 测试语音合成...") test_text = "你好,这是 Kokoro TTS 测试" print(f" 合成文本: {test_text}") import time import sounddevice as sd import numpy as np t0 = time.time() audio_parts = [] for chunk in tts.synthesize(test_text): audio_parts.append(chunk) elapsed = time.time() - t0 if audio_parts: full_audio = np.concatenate(audio_parts) print(f" ✓ 合成成功") print(f" 耗时: {elapsed:.2f}s") print(f" 音频长度: {len(full_audio) / 24000:.2f}s") print(f" 实时率: {len(full_audio) / 24000 / elapsed:.2f}x") # 播放测试 print(f"\n7. 播放测试音频...") sd.play(full_audio, samplerate=24000, blocking=True) print(f" ✓ 播放完成") return True else: print(f" ❌ 合成失败,未生成音频") return False except Exception as e: print(f" ❌ 异常: {e}") import traceback traceback.print_exc() return False async def main(): success = await test_kokoro() print() print("=" * 60) if success: print(" ✅ Kokoro TTS 验证通过!可以启动服务端了") else: print(" ❌ 验证失败,请检查上述问题") print("=" * 60) if __name__ == "__main__": asyncio.run(main())