把 AngeVoice 接入客户端
客户端不要写死模型和音色。先读取服务能力,再根据返回结果构造请求。
先读取能力
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 头。
常见接入错误
| 现象 | 先检查 |
|---|---|
| 401 | Bearer Token 是否正确,首个 WebSocket JSON 是否包含 token |
| 音频无声 | 格式、采样率、声道和播放器是否匹配 |
| 克隆音色不像 | 参考音频是否单人、清晰、无背景音,参考文本是否准确 |
| 流式卡顿 | 缩短首段文本,检查网络和模型冷启动,优先测试 Kokoro |
| 代理后 WebSocket 无音频 | 确认 Connection/Upgrade 头和超时配置 |