Docs/AngeVoice

把 AngeVoice 接入客户端

客户端不要写死模型和音色。先读取服务能力,再根据返回结果构造请求。

HTTPWebSocketCapabilities

先读取能力

GET /v1/tts/capabilities
GET /v1/audio/voices?detail=true

/v1/tts/capabilities 返回当前模型支持的格式、编码和音色。客户端应以实际响应为准,而不是假设所有模型都支持克隆或 MP3。

HTTP 合成

curl -X POST http://127.0.0.1:8100/v1/audio/speech \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -d '{"model":"kokoro","input":"要朗读的文本","voice":"zm_010","response_format":"wav"}' \
  --output speech.wav

需要 JSON 返回时,可以设置 response_encoding=base64。客户端应同时读取响应中的采样率、声道和媒体类型。

上传参考音频克隆

curl -X POST http://127.0.0.1:8100/api/tts \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -F model=moss \
  -F text="这是参考音频克隆测试。" \
  -F voice=Junhao \
  -F prompt_audio=@reference.wav \
  -F response_format=wav \
  --output clone.wav

ZipVoice 还需要与参考音频对应的 prompt_text。如果返回“当前模型不支持参考音频克隆”,请明确选择 MOSS 或 ZipVoice。

WebSocket 流式播放

WS /ws/v1/tts

{
  "model": "kokoro",
  "text": "这是一段流式合成测试。",
  "voice": "zm_010",
  "format": "pcm_s16le",
  "binary": false,
  "token": "YOUR_TOKEN"
}

PCM 流需要客户端自行按服务返回的采样率播放。通过反向代理时必须转发 WebSocket Upgrade 头。

常见接入错误

现象先检查
401Bearer Token 是否正确,首个 WebSocket JSON 是否包含 token
音频无声格式、采样率、声道和播放器是否匹配
克隆音色不像参考音频是否单人、清晰、无背景音,参考文本是否准确
流式卡顿缩短首段文本,检查网络和模型冷启动,优先测试 Kokoro
代理后 WebSocket 无音频确认 Connection/Upgrade 头和超时配置