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

4.7 KiB
Raw Blame History

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.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头。

异步任务响应

{
  "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. 内存不足: 长文本可能需要更多内存

日志查看

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功能。

许可证

遵循项目的开源许可证。