Qwen-Audio 与 CosyVoice 合成
SpeechSynthesizer HTTP、SSE 和 inference WebSocket 的参数、音频与事件。
适用模型:qwen-audio-3.0-tts-plus、qwen-audio-3.1-tts-flash、qwen-audio-3.0-tts-flash、cosyvoice-v3.5-plus、cosyvoice-v3.5-flash、cosyvoice-v3-plus、cosyvoice-v3-flash、cosyvoice-v2、cosyvoice-v1。完整协议和用量对应关系见 模型概览。
HTTP 与参数
POST /api/v1/services/audio/tts/SpeechSynthesizer
Authorization: Bearer $MODELSELL_API_KEY
Content-Type: application/jsoncosyvoice-v1 仅用下文的 WebSocket,或 标准 speech 桥接。
| 字段 | 类型 | 要求 / 用途 |
|---|---|---|
model | string | 必填,完整模型 ID |
input.text | string | 必填,朗读文本 |
input.voice | string | 必填,系统或专属音色 |
input.format | string | 可选,mp3 / wav / pcm / opus,能力依模型而定 |
input.sample_rate | integer | 可选,采样率;示例用 24000 Hz |
input.volume / rate / pitch | number | 可选,音量、语速、音调 |
input.instruction | string | 可选,受支持模型的风格、方言等指令 |
input.language_hints | string[] | 可选,目标语种,如 ["zh"] |
input.enable_ssml | boolean | 可选,使用 SSML 文本时设为 true |
input.word_timestamp_enabled | boolean | 可选,流式字时间戳,依音色而定 |
input.seed | integer | 可选,随机种子;可以显式为 0 |
input.hot_fix | object | 可选,pronunciation / replace 热修复词表 |
详细范围和模型限制见页末官方 API。系统音色不可跨型号随意替换:已验证 Qwen-Audio 3.1 使用 longanhuan_v3.1、3.0 Flash 使用 longanhuan_v3.6,CosyVoice v3 使用 longanyang。v2 / v3.5 可先创建绑定该模型的 专属音色。
curl --fail-with-body "$MODELSELL_BASE_URL/api/v1/services/audio/tts/SpeechSynthesizer" \
-H "Authorization: Bearer $MODELSELL_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "cosyvoice-v3-flash",
"input": {"text": "欢迎收听本期节目。", "voice": "longanyang", "format": "mp3", "sample_rate": 24000, "rate": 1.0}
}' --output response.json返回与 SSE
普通响应保留请求 ID、音频 URL 和用量,以下仅示意关键字段:
{"request_id":"REQUEST_ID","output":{"finish_reason":"stop","audio":{"url":"SIGNED_AUDIO_URL","data":"","id":"AUDIO_ID","expires_at":0}},"usage":{"characters":9}}Qwen-Audio 3.1 的用量是 input_tokens / output_tokens。下载 output.audio.url 即可保存完整音频;若直接需要字节,使用 /v1/audio/speech。
在请求头添加 X-DashScope-SSE: enable,并使用 curl -N 接收 SSE。按空行划分事件,将同一事件所有 data: 行合并后解析 JSON。音频分片位于 output.audio.data,按顺序 Base64 解码。sentence-begin、sentence-synthesis、sentence-end 与 output.sentence.words 保留分句及字时间戳;用量可能为累计值,不能逐分片求和。
双向 WebSocket
连接 $MODELSELL_WS_URL/api-ws/v1/inference?model=cosyvoice-v3-flash。握手带 Bearer 请求头;查询参数用于权限与路由,任务体仍必须指定相同模型。
- 发送
run-task,task_id使用新 UUID。 - 收到
task-started后发送一个或多个continue-task。 - 发送
finish-task,继续读取二进制音频直到task-finished。 - 遇到
task-failed检查错误;同一连接可用新任务 ID 再发任务,模型保持不变。
{
"header": {"action": "run-task", "task_id": "NEW_UUID", "streaming": "duplex"},
"payload": {
"task_group": "audio", "task": "tts", "function": "SpeechSynthesizer",
"model": "cosyvoice-v3-flash", "input": {},
"parameters": {"text_type": "PlainText", "voice": "longanyang", "format": "mp3", "sample_rate": 24000}
}
}HTTP 的 input 合成选项在 WS 中放入 payload.parameters,文本通过后续事件发送:
{"header":{"action":"continue-task","task_id":"NEW_UUID","streaming":"duplex"},"payload":{"input":{"text":"欢迎收听本期节目。"}}}{"header":{"action":"finish-task","task_id":"NEW_UUID","streaming":"duplex"},"payload":{"input":{}}}音频是 二进制帧,不是 JSON/Base64。SSML 开启后只发送一次 continue-task;字时间戳和指令支持范围仍由具体模型、音色决定。cosyvoice-v1 可用 longxiaochun,不支持所有新版本选项。
官方参考:Qwen-Audio HTTP、CosyVoice HTTP、WS 客户端事件、实时合成。核对日期:2026-10-06。