Files
qiming/qiming-mcp-proxy/voice-cli/TTS_README.md
2026-06-01 13:03:20 +08:00

197 lines
4.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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包管理器
```bash
curl -LsSf https://astral.sh/uv/install.sh | sh
```
### 2. 安装Python依赖
```bash
cd voice-cli
uv sync
```
## 配置
### TTS配置选项
在配置文件中添加以下TTS相关配置
```yaml
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请求
```bash
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请求
```bash
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"
}'
```
### 查询任务状态
```bash
curl -X GET "http://localhost:8080/api/v1/tasks/{task_id}"
```
### 获取任务结果
```bash
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.0
- `pitch` (int, 可选): 音调,范围 -20到20默认0
- `volume` (float, 可选): 音量,范围 0.5-2.0默认1.0
- `format` (string, 可选): 输出格式,支持 "mp3", "wav",默认"mp3"
- `priority` (string, 仅异步): 任务优先级 ("Low", "Normal", "High")
## 响应格式
### 同步响应
直接返回音频文件包含适当的Content-Type头。
### 异步任务响应
```json
{
"success": true,
"data": {
"task_id": "uuid-string",
"message": "TTS任务已提交",
"estimated_duration": 30
}
}
```
## 任务状态
TTS任务支持以下状态
- `Pending`: 任务已提交,等待处理
- `Processing`: 正在处理中
- `Completed`: 处理完成
- `Failed`: 处理失败
- `Cancelled`: 已取消
## 错误处理
### 常见错误码
- `400`: 请求参数错误
- `500`: 服务器内部错误
### 错误信息
- 文本长度超过限制
- 参数值超出范围
- TTS合成失败
- 文件操作错误
## 性能优化
1. **异步处理**: 长文本建议使用异步接口
2. **批量处理**: 可以提交多个异步任务
3. **缓存机制**: 相同文本可能会被缓存
4. **并发控制**: 通过配置控制最大并发任务数
## 扩展性
### 添加新的语音模型
1. 将模型文件放置在配置的model_path目录
2. 在请求中指定model参数
### 支持新的音频格式
1. 在配置的supported_formats中添加新格式
2. 确保index-tts支持该格式
## 故障排除
### 常见问题
1. **Python依赖缺失**: 运行 `uv sync` 安装依赖
2. **模型加载失败**: 检查model_path配置和模型文件
3. **权限问题**: 确保有写入data目录的权限
4. **内存不足**: 长文本可能需要更多内存
### 日志查看
```bash
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 # 路由配置
```
### 测试
```bash
cargo test tts
```
## 贡献
欢迎提交Issue和Pull Request来改进TTS功能。
## 许可证
遵循项目的开源许可证。