4.8 KiB
4.8 KiB
CosyVoice 引擎集成 - 快速参考
文件清单
已创建/修改的文件:
新增文件
tts/cosyvoice_engine.py- CosyVoice 引擎实现tts/COSYVOICE.md- 详细使用指南tts/test_cosyvoice.py- 集成测试文件
修改文件
tts/factory.py- 注册 CosyVoice 引擎tts/__init__.py- 导出 CosyVoiceEngine 类tts/examples.py- 添加 CosyVoice 使用示例requirements.txt- 添加 httpx 依赖
核心实现
1. CosyVoice 引擎类 (cosyvoice_engine.py)
from tts.cosyvoice_engine import CosyVoiceEngine
# 创建引擎实例
engine = CosyVoiceEngine(
api_url="http://192.168.1.200:8000/tts/zero_shot",
timeout=30.0
)
# 合成语音
audio = await engine.synthesize(
text="你好世界",
voice="speaker_id" # zero_shot_spk_id
)
2. 工厂模式注册
from tts.factory import TTSEngineFactory, TTSEngineType
# 通过工厂创建 CosyVoice 引擎
engine = TTSEngineFactory.create("cosyvoice")
# 或者
engine = TTSEngineFactory.create(TTSEngineType.COSYVOICE)
API 调用示例
POST 请求格式
POST http://192.168.1.200:8000/tts/zero_shot
Content-Type: application/json
{
"text": "合成的文本内容",
"zero_shot_spk_id": "发音人ID"
}
Python 集成示例
import asyncio
from tts.factory import TTSEngineFactory
async def main():
# 创建引擎
engine = TTSEngineFactory.create("cosyvoice")
# 合成语音
text = "你好,我是 CosyVoice 合成的语音。"
audio = await engine.synthesize(
text=text,
voice="female_speaker_001"
)
# 保存音频文件
with open("output.wav", "wb") as f:
f.write(audio.getvalue())
asyncio.run(main())
FastAPI 路由示例
from fastapi import APIRouter, HTTPException
from tts.factory import TTSEngineFactory
router = APIRouter(prefix="/api/tts", tags=["tts"])
@router.post("/cosyvoice")
async def synthesize(text: str, speaker_id: str):
"""使用 CosyVoice 合成语音"""
try:
engine = TTSEngineFactory.create("cosyvoice")
audio = await engine.synthesize(text=text, voice=speaker_id)
return {
"status": "success",
"size": len(audio.getvalue())
}
except ValueError as e:
raise HTTPException(status_code=400, detail=str(e))
except Exception as e:
raise HTTPException(status_code=500, detail="TTS failed")
支持的引擎列表
获取所有支持的 TTS 引擎:
from tts.factory import TTSEngineFactory
engines = TTSEngineFactory.get_supported_engines()
# 返回: ['edge-tts', 'cosyvoice']
关键特性
✓ 异步支持 - 使用 asyncio 异步操作
✓ HTTP 客户端 - 使用 httpx 库进行异步 HTTP 请求
✓ 错误处理 - 完善的异常处理和日志记录
✓ 连接管理 - 提供 close() 方法管理 HTTP 连接
✓ 工厂模式 - 统一的引擎创建和管理接口
✓ 参数验证 - 强制要求 voice 参数
依赖项
httpx>=0.24.0- 异步 HTTP 客户端loguru- 日志记录(已存在)
配置建议
环境变量方式
在 .env 文件中添加:
COSYVOICE_API_URL=http://192.168.1.200:8000/tts/zero_shot
COSYVOICE_TIMEOUT=30
在代码中使用:
import os
from tts.cosyvoice_engine import CosyVoiceEngine
api_url = os.getenv("COSYVOICE_API_URL", "http://192.168.1.200:8000/tts/zero_shot")
timeout = float(os.getenv("COSYVOICE_TIMEOUT", "30"))
engine = CosyVoiceEngine(api_url=api_url, timeout=timeout)
配置类方式
创建 config/cosyvoice.py:
from pydantic_settings import BaseSettings
class CosyVoiceSettings(BaseSettings):
api_url: str = "http://192.168.1.200:8000/tts/zero_shot"
timeout: float = 30.0
class Config:
env_prefix = "COSYVOICE_"
settings = CosyVoiceSettings()
故障排查
问题:连接失败
ValueError: Failed to connect to CosyVoice API
检查清单:
- CosyVoice 服务是否运行
- 网络连接是否正常
- API URL 是否正确
- 防火墙是否阻止连接
问题:缺少 voice 参数
ValueError: voice (zero_shot_spk_id) is required for CosyVoice
解决方案: 确保在调用 synthesize() 时提供 voice 参数
问题:httpx 未安装
ModuleNotFoundError: No module named 'httpx'
解决方案: 安装依赖
pip install httpx
测试
运行集成测试:
python tts/test_cosyvoice.py
运行示例代码:
python tts/examples.py
更多信息
版本信息
- CosyVoice 引擎版本: 1.0.0
- 最后更新: 2025年11月
- 兼容 Python 3.7+