4.7 KiB
4.7 KiB
TTS功能集成说明
本项目已成功集成文本转语音(TTS)功能,使用index-tts库作为核心语音合成引擎。
功能特性
同步接口
- 端点:
POST /tts/sync - 功能: 实时文本转语音,直接返回音频文件
- 适用场景: 短文本、实时性要求高的场景
异步接口
- 端点:
POST /api/v1/tasks/tts - 功能: 提交TTS任务到队列,返回任务ID
- 任务查询: 复用现有的
/api/v1/tasks/{task_id}接口 - 结果获取: 复用现有的
/api/v1/tasks/{task_id}/result接口 - 适用场景: 长文本、批量处理、后台任务
安装依赖
1. 安装uv包管理器
curl -LsSf https://astral.sh/uv/install.sh | sh
2. 安装Python依赖
cd voice-cli
uv sync
配置
TTS配置选项
在配置文件中添加以下TTS相关配置:
tts:
python_path: null # Python解释器路径(可选,默认自动查找)
model_path: null # TTS模型路径(可选)
default_model: "default" # 默认语音模型
supported_formats: # 支持的音频格式
- "mp3"
- "wav"
max_text_length: 5000 # 最大文本长度
default_speed: 1.0 # 默认语速 (0.5-2.0)
default_pitch: 0 # 默认音调 (-20到20)
default_volume: 1.0 # 默认音量 (0.5-2.0)
timeout_seconds: 300 # TTS任务超时时间
API使用示例
同步TTS请求
curl -X POST "http://localhost:8080/tts/sync" \
-H "Content-Type: application/json" \
-d '{
"text": "你好,世界!这是一个语音合成测试。",
"speed": 1.0,
"pitch": 0,
"volume": 1.0,
"format": "mp3"
}'
异步TTS请求
curl -X POST "http://localhost:8080/api/v1/tasks/tts" \
-H "Content-Type: application/json" \
-d '{
"text": "这是一个较长的文本,将通过异步处理转换为语音。",
"speed": 1.2,
"pitch": 5,
"volume": 0.8,
"format": "wav",
"priority": "Normal"
}'
查询任务状态
curl -X GET "http://localhost:8080/api/v1/tasks/{task_id}"
获取任务结果
curl -X GET "http://localhost:8080/api/v1/tasks/{task_id}/result"
请求参数说明
TtsSyncRequest / TtsAsyncRequest
text(string, 必需): 要合成的文本model(string, 可选): 语音模型名称speed(float, 可选): 语速,范围 0.5-2.0,默认1.0pitch(int, 可选): 音调,范围 -20到20,默认0volume(float, 可选): 音量,范围 0.5-2.0,默认1.0format(string, 可选): 输出格式,支持 "mp3", "wav",默认"mp3"priority(string, 仅异步): 任务优先级 ("Low", "Normal", "High")
响应格式
同步响应
直接返回音频文件,包含适当的Content-Type头。
异步任务响应
{
"success": true,
"data": {
"task_id": "uuid-string",
"message": "TTS任务已提交",
"estimated_duration": 30
}
}
任务状态
TTS任务支持以下状态:
Pending: 任务已提交,等待处理Processing: 正在处理中Completed: 处理完成Failed: 处理失败Cancelled: 已取消
错误处理
常见错误码
400: 请求参数错误500: 服务器内部错误
错误信息
- 文本长度超过限制
- 参数值超出范围
- TTS合成失败
- 文件操作错误
性能优化
- 异步处理: 长文本建议使用异步接口
- 批量处理: 可以提交多个异步任务
- 缓存机制: 相同文本可能会被缓存
- 并发控制: 通过配置控制最大并发任务数
扩展性
添加新的语音模型
- 将模型文件放置在配置的model_path目录
- 在请求中指定model参数
支持新的音频格式
- 在配置的supported_formats中添加新格式
- 确保index-tts支持该格式
故障排除
常见问题
- Python依赖缺失: 运行
uv sync安装依赖 - 模型加载失败: 检查model_path配置和模型文件
- 权限问题: 确保有写入data目录的权限
- 内存不足: 长文本可能需要更多内存
日志查看
tail -f logs/daemon.log
开发说明
代码结构
src/
├── models/
│ ├── tts.rs # TTS相关数据模型
│ └── config.rs # 配置结构
├── services/
│ ├── tts_service.rs # TTS核心服务
│ └── tts_task_manager.rs # TTS任务管理器
└── server/
├── handlers.rs # HTTP处理器
└── routes.rs # 路由配置
测试
cargo test tts
贡献
欢迎提交Issue和Pull Request来改进TTS功能。
许可证
遵循项目的开源许可证。