本文介绍如何通过WebSocket连接访问CosyVoice语音合成服务。
DashScope SDK目前仅支持Java和Python。若想使用其他编程语言开发CosyVoice语音合成应用程序,可以通过WebSocket连接与服务进行通信。
用户指南:关于模型介绍和选型建议请参见语音合成-CosyVoice/Sambert。
在线体验:仅cosyvoice-v1支持在线体验。
WebSocket是一种支持全双工通信的网络协议。客户端和服务器通过一次握手建立持久连接,双方可以互相主动推送数据,因此在实时性和效率方面具有显著优势。
对于常用编程语言,有许多现成的WebSocket库和示例可供参考,例如:
Go:
gorilla/websocket
PHP:
Ratchet
Node.js:
ws
建议您先了解WebSocket的基本原理和技术细节,再参照本文进行开发。
前提条件
已开通服务并获取API Key。请配置API Key到环境变量,而非硬编码在代码中,防范因代码泄露导致的安全风险。
当您需要为第三方应用或用户提供临时访问权限,或者希望严格控制敏感数据访问、删除等高风险操作时,建议使用临时鉴权Token。
与长期有效的 API Key 相比,临时鉴权 Token 具备时效性短(60秒)、安全性高的特点,适用于临时调用场景,能有效降低API Key泄露的风险。
使用方式:在代码中,将原本用于鉴权的 API Key 替换为获取到的临时鉴权 Token 即可。
模型与价格
在资源与预算允许的情况下,优先选择 cosyvoice-v3-plus 获取最佳合成效果,对成本敏感时可选 cosyvoice-v3 平衡质量与价格,其余版本仅建议在兼容或低要求场景使用。
模型名称 | 单价 | 免费额度 |
cosyvoice-v3-plus | 2元/万字符 | 每主账号每模型每月2000字符。 cosyvoice-v3和cosyvoice-v3-plus模型开放邀测(所有人可见,申请使用),申请通过后发放免费额度。 |
cosyvoice-v3 | 0.4元/万字符 | |
cosyvoice-v2 | 2元/万字符 | |
cosyvoice-v1 |
字符计算规则:1个汉字算2个字符,英文、标点符号、空格均按照1个字符计费
语音合成文本限制与格式规范
文本长度限制
单次通过continue-task指令发送的待合成文本长度不得超过 2000 字符,多次调用continue-task指令累计发送的文本总长度不得超过 20 万字符。
字符计算规则
汉字:2字符
英文字母/数字/标点/空格:1字符
计算文本长度时,SSML标签内容也包含在内
示例:
"你好"
→ 2+2=4字符"中A文123"
→ 2+1+2+1+1+1=8字符"中文。"
→ 2+2+1=5字符"中 文。"
→ 2+1+2+1=6字符"<speak>你好<speak/>"
→ 7+2+2+8=19字符
编码格式
需采用UTF-8编码。
数学表达式支持说明
当前数学表达式解析功能仅适用于cosyvoice-v2
模型,支持识别中小学常见的数学表达式,包括但不限于基础运算、代数、几何等内容。
详情请参见Latex能力支持说明。
SSML标记语言支持说明
当前SSML(Speech Synthesis Markup Language,语音合成标记语言)功能仅适用于cosyvoice-v2
模型的部分音色(请查看音色列表确认是否支持SSML)。
使用方式如下:
在发送run-task指令时,将参数
enable_ssml
设置为true
,以开启SSML支持;随后通过continue-task指令发送包含SSML的文本。
开启 SSML 支持(即将 enable_ssml
参数设为 true
)后,仅允许通过一次continue-task指令提交完整的待合成文本,不支持多次发送。
交互流程
客户端发送给服务端的消息称作指令;服务端返回给客户端的消息有两种:JSON格式的事件和二进制音频流。
按时间顺序,客户端与服务端的交互流程如下:
建立连接:客户端与服务端建立WebSocket连接。
开启任务:
客户端发送run-task指令以开启任务。
客户端收到服务端返回的task-started事件,标志着任务已成功开启,可以进行后续步骤。
发送待合成文本:
客户端按顺序向服务端发送一个或多个包含待合成文本的continue-task指令,服务端接收到完整语句后返回音频流(文本长度有约束, 详情参见continue-task指令中
text
字段描述)。说明您可以多次发送continue-task指令,按顺序提交文本片段。服务端接收文本片段后自动进行分句:
完整语句立即合成,此时客户端能够接收到服务端返回的音频
不完整语句缓存至完整后合成,语句不完整时服务端不返回音频
当发送finish-task指令时,服务端会强制合成所有缓存内容。
通知服务端结束任务:
待文本发送完毕后,客户端发送finish-task指令通知服务端结束任务,并继续接收服务端返回的音频流(注意不要遗漏该步骤,否则可能收不到语音或收不到结尾部分的语音)。
任务结束:
客户端收到服务端返回的task-finished事件,标志着任务结束。
关闭连接:客户端关闭WebSocket连接。
URL
WebSocket URL固定如下:
wss://dashscope.aliyuncs.com/api-ws/v1/inference
Headers
请求头中需添加如下信息:
{
"Authorization": "bearer <your_dashscope_api_key>", // 必选 将<your_dashscope_api_key>替换成您自己的API Key
"user-agent": "your_platform_info", // 可选
"X-DashScope-WorkSpace": workspace, // 可选,阿里云百炼业务空间ID
"X-DashScope-DataInspection": "enable"
}
指令(客户端→服务端)
指令是客户端发送给服务端的消息,为JSON格式,以Text Frame方式发送,用于控制任务的起止和标识任务边界。
发送指令需严格遵循以下时序,否则可能导致任务失败:
发送 run-task指令
用于启动语音合成任务。
返回的
task_id
需在后续发送continue-task指令和finish-task指令时使用,必须保持一致。
用于发送待合成文本。
必须在接收到服务端返回的task-started事件后,才能发送此指令。
用于结束语音合成任务。
在所有continue-task指令发送完毕后发送此指令。
1. run-task指令:开启任务
该指令用于开启语音合成任务。可在该指令中对音色、采样率等请求参数进行设置。
发送时机:WebSocket连接建立后。
不要发送待合成文本:此处发送合成文本不利于问题排查,因此应避免在此发送文本。
示例:
{
"header": {
"action": "run-task",
"task_id": "2bf83b9a-baeb-4fda-8d9a-xxxxxxxxxxxx", // 随机uuid
"streaming": "duplex"
},
"payload": {
"task_group": "audio",
"task": "tts",
"function": "SpeechSynthesizer",
"model": "cosyvoice-v2",
"parameters": {
"text_type": "PlainText",
"voice": "longxiaochun_v2", // 音色
"format": "mp3", // 音频格式
"sample_rate": 22050, // 采样率
"volume": 50, // 音量
"rate": 1, // 语速
"pitch": 1 // 音调
},
"input": {// input不能省去,不然会报错
}
}
}
header
参数说明:
参数 | 类型 | 是否必选 | 说明 |
header.action | string | 是 | 指令类型。 当前指令中,固定为"run-task"。 |
header.task_id | string | 是 | 当次任务ID。 为32位通用唯一识别码(UUID),由32个随机生成的字母和数字组成。可以带横线(如
在后续发送continue-task指令和finish-task指令时,用到的task_id需要和发送run-task指令时使用的task_id保持一致。 |
header.streaming | string | 是 | 固定字符串:"duplex" |
payload
参数说明:
参数 | 类型 | 是否必选 | 说明 |
payload.task_group | string | 是 | 固定字符串:"audio"。 |
payload.task | string | 是 | 固定字符串:"tts"。 |
payload.function | string | 是 | 固定字符串:"SpeechSynthesizer"。 |
payload.model | string | 是 | 指定模型。 不同版本的模型编码方式一致,但使用时须确保模型( |
payload.input | object | 是 |
|
payload.parameters | |||
text_type | string | 是 | 固定字符串:“PlainText”。 |
voice | string | 是 | 指定语音合成所使用的音色。 支持默认音色和专属音色: ⚠️ 使用声音复刻系列模型合成语音时,仅能使用该模型复刻生成的专属音色,不能使用默认音色。 ⚠️ 使用专属音色合成语音时,语音合成模型( |
format | string | 否 | 音频编码格式。
音频格式为opus时,支持通过 |
sample_rate | integer | 否 | 音频采样率,支持下述采样率(单位:Hz): 8000, 16000, 22050(默认), 24000, 44100, 48000。 说明 默认采样率代表当前音色的最佳采样率,缺省条件下默认按照该采样率输出,同时支持降采样或升采样。 |
volume | integer | 否 | 音量,取值范围:0~100。默认值:50。 |
rate | float | 否 | 合成音频的语速,取值范围:0.5~2。
默认值:1.0。 |
pitch | float | 否 | 合成音频的语调,取值范围:0.5~2。 默认值:1.0。 |
enable_ssml | boolean | 否 | 是否开启SSML功能。 该参数设为 |
bit_rate | int | 否 | 指定音频的码率,取值范围:6~510kbps。 码率越大,音质越好,音频文件体积越大。 仅在音频格式(
|
seed | int | 否 | 生成时使用的随机数种子,使合成的效果产生变化。默认值0。取值范围:0~65535。 仅cosyvoice-v3、cosyvoice-v3-plus支持该功能。 |
style | int | 否 | 调整风格。默认值0。取值应为大于等于0的整数。 仅cosyvoice-v3、cosyvoice-v3-plus支持该功能。 |
language_hints | array[string] | 否 | 设置合成语种。 仅cosyvoice-v3、cosyvoice-v3-plus支持该功能。 当前只支持同时配置一个语种。 取值范围:
|
instruction | String | 否 | 设置提示词。 仅cosyvoice-v3、cosyvoice-v3-plus支持该功能。 目前仅支持设置情感。 格式:“你说话的情感是<情感值>”。 支持的情感值: |
2. continue-task指令
该指令专门用来发送待合成文本。
可以在一个continue-task
指令中一次性发送待合成文本,也可以将文本分段并按顺序在多个continue-task
指令中发送。
发送时机:在收到task-started事件后发送。
发送文本片段的间隔不得超过23秒,否则触发“request timeout after 23 seconds”异常。
若无待发送文本,需及时发送finish-task指令结束任务。
服务端强制设定23秒超时机制,客户端无法修改该配置。
示例:
{
"header": {
"action": "continue-task",
"task_id": "2bf83b9a-baeb-4fda-8d9a-xxxxxxxxxxxx", // 随机uuid
"streaming": "duplex"
},
"payload": {
"input": {
"text": "床前明月光,疑是地上霜"
}
}
}
header
参数说明:
参数 | 类型 | 是否必选 | 说明 |
header.action | string | 是 | 指令类型。 当前指令中,固定为"continue-task"。 |
header.task_id | string | 是 | 当次任务ID。 需要和发送run-task指令时使用的task_id保持一致。 |
header.streaming | string | 是 | 固定字符串:"duplex" |
payload
参数说明:
参数 | 类型 | 是否必选 | 说明 |
input.text | string | 是 | 待合成文本。 |
3. finish-task指令:结束任务
该指令用于结束语音合成任务。
请务必确保发送该指令,否则可能会出现合成语音缺失的问题。
该指令发送后,服务端会将剩余的文本转成语音,语音合成完成后,服务端向客户端返回task-finished事件。
发送时机:在continue-task指令发送完成后发送。
示例:
{
"header": {
"action": "finish-task",
"task_id": "2bf83b9a-baeb-4fda-8d9a-xxxxxxxxxxxx",
"streaming": "duplex"
},
"payload": {
"input": {}//input不能省去,否则会报错
}
}
header
参数说明:
参数 | 类型 | 是否必选 | 说明 |
header.action | string | 是 | 指令类型。 当前指令中,固定为"finish-task"。 |
header.task_id | string | 是 | 当次任务ID。 需要和发送run-task指令时使用的task_id保持一致。 |
header.streaming | string | 是 | 固定字符串:"duplex" |
payload
参数说明:
参数 | 类型 | 是否必选 | 说明 |
payload.input | object | 是 | 固定格式:{}。 |
事件(服务端→客户端)
事件是服务端返回给客户端的消息,为JSON格式,代表不同的处理阶段。
服务端返回给客户端的二进制音频不包含在任何事件中,需单独接收。
1. task-started事件:任务已开启
当监听到服务端返回的task-started
事件时,标志着任务已成功开启。只有在接收到该事件后,才能向服务端发送continue-task指令或finish-task指令;否则,任务将执行失败。
task-started
事件的payload
没有内容。
示例:
{
"header": {
"task_id": "2bf83b9a-baeb-4fda-8d9a-xxxxxxxxxxxx",
"event": "task-started",
"attributes": {}
},
"payload": {}
}
header
参数说明:
参数 | 类型 | 说明 |
header.event | string | 事件类型。 当前事件中,固定为"task-started"。 |
header.task_id | string | 客户端生成的task_id |
2. result-generated事件
客户端发送continue-task指令和finish-task指令的同时,服务端持续返回result-generated
事件。
在CosyVoice服务中,result-generated
事件为协议预留接口,封装了Request ID等信息,现阶段可以忽略。
示例:
{
"header": {
"task_id": "2bf83b9a-baeb-4fda-8d9a-xxxxxxxxxxxx",
"event": "result-generated",
"attributes": {
"request_uuid": "0a9dba9e-d3a6-45a4-be6d-xxxxxxxxxxxx"
}
},
"payload": {}
}
header
参数说明:
参数 | 类型 | 说明 |
header.event | string | 事件类型。 当前事件中,固定为"result-generated"。 |
header.task_id | string | 客户端生成的task_id。 |
header.attributes.request_uuid | string | Request ID,可提供给CosyVoice开发人员定位问题。 |
payload
参数说明:
参数 | 类型 | 说明 |
payload.usage.characters | integer | 截止当前,本次请求中计费的有效字符数。
在一次任务中, |
3. task-finished事件:任务已结束
当监听到服务端返回的task-finished
事件时,说明任务已结束。
结束任务后可以关闭WebSocket连接结束程序,也可以复用WebSocket连接,重新发送run-task指令开启下一个任务(参见关于建连开销和连接复用)。
示例:
{
"header": {
"task_id": "2bf83b9a-baeb-4fda-8d9a-xxxxxxxxxxxx",
"event": "task-finished",
"attributes": {
"request_uuid": "0a9dba9e-d3a6-45a4-be6d-xxxxxxxxxxxx"
}
},
"payload": {
"output": {
"sentence": {
"words": []
}
},
"usage": {
"characters": 13
}
}
}
header
参数说明:
参数 | 类型 | 说明 |
header.event | string | 事件类型。 当前事件中,固定为"task-finished"。 |
header.task_id | string | 客户端生成的task_id。 |
header.attributes.request_uuid | string | Request ID,可提供给CosyVoice开发人员定位问题。 |
payload
参数说明:
参数 | 类型 | 说明 |
payload.usage.characters | integer | 截止当前,本次请求中计费的有效字符数。
在一次任务中, |
4. task-failed事件:任务失败
如果接收到task-failed
事件,表示任务失败。此时需要关闭WebSocket连接并处理错误。通过分析报错信息,如果是由于编程问题导致的任务失败,您可以调整代码进行修正。
示例:
{
"header": {
"task_id": "2bf83b9a-baeb-4fda-8d9a-xxxxxxxxxxxx",
"event": "task-failed",
"error_code": "InvalidParameter",
"error_message": "[tts:]Engine return error code: 418",
"attributes": {}
},
"payload": {}
}
header
参数说明:
参数 | 类型 | 说明 |
header.event | string | 事件类型。 当前事件中,固定为"task-failed"。 |
header.task_id | string | 客户端生成的task_id。 |
header.error_code | string | 报错类型描述。 |
header.error_message | string | 具体报错原因。 |
关于建连开销和连接复用
WebSocket服务支持连接复用以提升资源的利用效率,避免建立连接开销。
服务端收到客户端发送的 run-task指令后,将启动一个新的任务,客户端发送finish-task指令后,服务端在任务完成时返回task-finished事件以结束该任务。结束任务后WebSocket连接可以被复用,客户端重新发送run-task指令即可开启下一个任务。
在复用连接中的不同任务需要使用不同 task_id。
如果在任务执行过程中发生失败,服务将依然返回task-failed事件,并关闭该连接。此时这个连接无法继续复用。
如果在任务结束后60秒没有新的任务,连接会超时自动断开。
示例代码
示例代码仅提供最基础的服务调通实现,实际业务场景的相关代码需您自行开发。
在编写WebSocket客户端代码时,为了同时发送和接收消息,通常采用异步编程。您可以按照以下步骤来编写程序:
错误码
如遇报错问题,请参见错误信息进行排查。
若问题仍未解决,请加入开发者群反馈遇到的问题,并提供Request ID,以便进一步排查问题。
音色列表
当前默认支持的音色如下表所示。若您需要更加个性化的音色,可通过声音复刻功能免费定制专属音色,详情请参见使用复刻的音色进行语音合成。
进行语音合成时,model
参数必须与所选音色对应,否则调用将失败。
cosyvoice-v3
适用场景 | 音色 | 音色特质 | 音频试听(右键保存音频) | voice参数 | 语言 | 权限要求 |
童声(标杆音色) | 龙火火 | 桀骜不驯男童 | longhuohuo_v3 | 中、英 | ⚠️ 若有语音服务业务对接人,请直接联系其申请开通;否则请提交工单申请 | |
龙呼呼 | 天真烂漫女童 | longhuhu_v3 | 中、英 | ⚠️ 若有语音服务业务对接人,请直接联系其申请开通;否则请提交工单申请 | ||
方言(标杆音色) | 龙川叔 | 油腻搞笑叔 | longchuanshu_v3 | 中、英 | ⚠️ 若有语音服务业务对接人,请直接联系其申请开通;否则请提交工单申请 |
cosyvoice-v2
适用场景 | 音色 | 音色特质 | 音频试听(右键保存音频) | voice参数 | 语言 | SSML | 权限要求 |
童声(标杆音色) | 龙火火 | 桀骜不驯男童 | longhuohuo | 中、英 | ✅ | ⚠️ 若有语音服务业务对接人,请直接联系其申请开通;否则请提交工单申请 | |
龙呼呼 | 天真烂漫女童 | longhuhu | 中、英 | ✅ | ⚠️ 若有语音服务业务对接人,请直接联系其申请开通;否则请提交工单申请 | ||
方言(标杆音色) | 龙川叔 | 油腻搞笑叔 | longchuanshu | 中、英 | ✅ | ⚠️ 若有语音服务业务对接人,请直接联系其申请开通;否则请提交工单申请 | |
消费电子-教育培训 | 龙安培 | 青少年教师女 | longanpei | 中、英 | ✅ | ⚠️ 若有语音服务业务对接人,请直接联系其申请开通;否则请提交工单申请 | |
消费电子-儿童陪伴 | 龙汪汪 | 台湾少年音 | longwangwang | 中、英 | ✅ | ⚠️ 若有语音服务业务对接人,请直接联系其申请开通;否则请提交工单申请 | |
龙泡泡 | 飞天泡泡音 | longpaopao | 中、英 | ✅ | ⚠️ 若有语音服务业务对接人,请直接联系其申请开通;否则请提交工单申请 | ||
消费电子-儿童有声书 | 龙闪闪 | 戏剧化童声 | longshanshan | 中、英 | ✅ | ⚠️ 若有语音服务业务对接人,请直接联系其申请开通;否则请提交工单申请 | |
龙牛牛 | 阳光男童声 | longniuniu | 中、英 | ✅ | ⚠️ 若有语音服务业务对接人,请直接联系其申请开通;否则请提交工单申请 | ||
短视频配音 | 龙黛玉 | 娇率才女音 | longdaiyu | 中、英 | ✅ | ⚠️ 若有语音服务业务对接人,请直接联系其申请开通;否则请提交工单申请 | |
龙高僧 | 得道高僧音 | longgaoseng | 中、英 | ✅ | ⚠️ 若有语音服务业务对接人,请直接联系其申请开通;否则请提交工单申请 | ||
客服 | 龙应沐 | 优雅知性女 | longyingmu | 中、英 | ✅ | ⚠️ 若有语音服务业务对接人,请直接联系其申请开通;否则请提交工单申请 | |
龙应询 | 年轻青涩男 | longyingxun | 中、英 | ✅ | ⚠️ 若有语音服务业务对接人,请直接联系其申请开通;否则请提交工单申请 | ||
龙应催 | 严肃催收男 | longyingcui | 中、英 | ✅ | ✅可直接使用 | ||
龙应答 | 开朗高音女 | longyingda | 中、英 | ✅ | ✅可直接使用 | ||
龙应静 | 低调冷静女 | longyingjing | 中、英 | ✅ | ✅可直接使用 | ||
龙应严 | 义正严辞女 | longyingyan | 中、英 | ✅ | ✅可直接使用 | ||
龙应甜 | 温柔甜美女 | longyingtian | 中、英 | ✅ | ✅可直接使用 | ||
龙应冰 | 尖锐强势女 | longyingbing | 中、英 | ✅ | ✅可直接使用 | ||
龙应桃 | 温柔淡定女 | longyingtao | 中、英 | ✅ | ✅可直接使用 | ||
龙应聆 | 温和共情女 | longyingling | 中、英 | ✅ | ✅可直接使用 | ||
语音助手 | YUMI | 正经青年女 | longyumi_v2 | 中、英 | ✅ | ✅可直接使用 | |
龙小淳 | 知性积极女 | longxiaochun_v2 | 中、英 | ✅ | ✅可直接使用 | ||
龙小夏 | 沉稳权威女 | longxiaoxia_v2 | 中、英 | ✅ | ✅可直接使用 | ||
直播带货 | 龙安燃 | 活泼质感女 | longanran | 中、英 | ✅ | ✅可直接使用 | |
龙安宣 | 经典直播女 | longanxuan | 中、英 | ✅ | ✅可直接使用 | ||
龙安冲 | 激情推销男 | longanchong | 中、英 | ✅ | ⚠️ 若有语音服务业务对接人,请直接联系其申请开通;否则请提交工单申请 | ||
龙安萍 | 高亢直播女 | longanping | 中、英 | ✅ | ⚠️ 若有语音服务业务对接人,请直接联系其申请开通;否则请提交工单申请 | ||
有声书 | 龙白芷 | 睿气旁白女 | longbaizhi | 中、英 | ✅ | ⚠️ 若有语音服务业务对接人,请直接联系其申请开通;否则请提交工单申请 | |
龙三叔 | 沉稳质感男 | longsanshu | 中、英 | ✅ | ✅可直接使用 | ||
龙修 | 博才说书男 | longxiu_v2 | 中、英 | ✅ | ✅可直接使用 | ||
龙妙 | 抑扬顿挫女 | longmiao_v2 | 中、英 | ✅ | ✅可直接使用 | ||
龙悦 | 温暖磁性女 | longyue_v2 | 中、英 | ✅ | ✅可直接使用 | ||
龙楠 | 睿智青年男 | longnan_v2 | 中、英 | ✅ | ✅可直接使用 | ||
龙媛 | 温暖治愈女 | longyuan_v2 | 中、英 | ✅ | ✅可直接使用 | ||
社交陪伴 | 龙安柔 | 温柔闺蜜女 | longanrou | 中、英 | ✅ | ✅可直接使用 | |
龙嫱 | 浪漫风情女 | longqiang_v2 | 中、英 | ✅ | ✅可直接使用 | ||
龙寒 | 温暖痴情男 | longhan_v2 | 中、英 | ✅ | ✅可直接使用 | ||
龙星 | 温婉邻家女 | longxing_v2 | 中、英 | ✅ | ✅可直接使用 | ||
龙华 | 元气甜美女 | longhua_v2 | 中、英 | ✅ | ✅可直接使用 | ||
龙婉 | 积极知性女 | longwan_v2 | 中、英 | ✅ | ✅可直接使用 | ||
龙橙 | 智慧青年男 | longcheng_v2 | 中、英 | ✅ | ✅可直接使用 | ||
龙菲菲 | 甜美娇气女 | longfeifei_v2 | 中、英 | ✅ | ✅可直接使用 | ||
龙小诚 | 磁性低音男 | longxiaocheng_v2 | 中、英 | ✅ | ✅可直接使用 | ||
龙哲 | 呆板大暖男 | longzhe_v2 | 中、英 | ✅ | ✅可直接使用 | ||
龙颜 | 温暖春风女 | longyan_v2 | 中、英 | ✅ | ✅可直接使用 | ||
龙天 | 磁性理智男 | longtian_v2 | 中、英 | ✅ | ✅可直接使用 | ||
龙泽 | 温暖元气男 | longze_v2 | 中、英 | ✅ | ✅可直接使用 | ||
龙邵 | 积极向上男 | longshao_v2 | 中、英 | ✅ | ✅可直接使用 | ||
龙浩 | 多情忧郁男 | longhao_v2 | 中、英 | ✅ | ✅可直接使用 | ||
龙深 | 实力歌手男 | kabuleshen_v2 | 中、英 | ✅ | ✅可直接使用 | ||
童声 | 龙杰力豆 | 阳光顽皮男 | longjielidou_v2 | 中、英 | ✅ | ✅可直接使用 | |
龙铃 | 稚气呆板女 | longling_v2 | 中、英 | ✅ | ✅可直接使用 | ||
龙可 | 懵懂乖乖女 | longke_v2 | 中、英 | ✅ | ✅可直接使用 | ||
龙仙 | 豪放可爱女 | longxian_v2 | 中、英 | ✅ | ✅可直接使用 | ||
方言 | 龙老铁 | 东北直率男 | longlaotie_v2 | 中(东北)、英 | ✅ | ✅可直接使用 | |
龙嘉怡 | 知性粤语女 | longjiayi_v2 | 中(粤语)、英 | ✅ | ✅可直接使用 | ||
龙桃 | 积极粤语女 | longtao_v2 | 中(粤语)、英 | ✅ | ✅可直接使用 | ||
诗词朗诵 | 龙飞 | 热血磁性男 | longfei_v2 | 中、英 | ✅ | ✅可直接使用 | |
李白 | 古代诗仙男 | libai_v2 | 中、英 | ✅ | ✅可直接使用 | ||
龙津 | 优雅温润男 | longjin_v2 | 中、英 | ✅ | ✅可直接使用 | ||
新闻播报 | 龙书 | 沉稳青年男 | longshu_v2 | 中、英 | ✅ | ✅可直接使用 | |
Bella2.0 | 精准干练女 | loongbella_v2 | 中、英 | ✅ | ✅可直接使用 | ||
龙硕 | 博才干练男 | longshuo_v2 | 中、英 | ✅ | ✅可直接使用 | ||
龙小白 | 沉稳播报女 | longxiaobai_v2 | 中、英 | ✅ | ✅可直接使用 | ||
龙婧 | 典型播音女 | longjing_v2 | 中、英 | ✅ | ✅可直接使用 | ||
loongstella | 飒爽利落女 | loongstella_v2 | 中、英 | ✅ | ✅可直接使用 | ||
出海营销 | loongeva | 知性英文女 | loongeva_v2 | 英式英文 | ❌ | ✅可直接使用 | |
loongbrian | 沉稳英文男 | loongbrian_v2 | 英式英文 | ❌ | ✅可直接使用 | ||
loongluna | 英式英文女 | loongluna_v2 | 英式英文 | ❌ | ✅可直接使用 | ||
loongluca | 英式英文男 | loongluca_v2 | 英式英文 | ❌ | ✅可直接使用 | ||
loongemily | 英式英文女 | loongemily_v2 | 英式英文 | ❌ | ✅可直接使用 | ||
loongeric | 英式英文男 | loongeric_v2 | 英式英文 | ❌ | ✅可直接使用 | ||
loongabby | 美式英文女 | loongabby_v2 | 美式英文 | ❌ | ✅可直接使用 | ||
loongannie | 美式英文女 | loongannie_v2 | 美式英文 | ❌ | ✅可直接使用 | ||
loongandy | 美式英文男 | loongandy_v2 | 美式英文 | ❌ | ✅可直接使用 | ||
loongava | 美式英文女 | loongava_v2 | 美式英文 | ❌ | ✅可直接使用 | ||
loongbeth | 美式英文女 | loongbeth_v2 | 美式英文 | ❌ | ✅可直接使用 | ||
loongbetty | 美式英文女 | loongbetty_v2 | 美式英文 | ❌ | ✅可直接使用 | ||
loongcindy | 美式英文女 | loongcindy_v2 | 美式英文 | ❌ | ✅可直接使用 | ||
loongcally | 美式英文女 | loongcally_v2 | 美式英文 | ❌ | ✅可直接使用 | ||
loongdavid | 美式英文男 | loongdavid_v2 | 美式英文 | ❌ | ✅可直接使用 | ||
loongdonna | 美式英文女 | loongdonna_v2 | 美式英文 | ❌ | ✅可直接使用 | ||
loongkyong | 韩语女 | loongkyong_v2 | 韩语 | ❌ | ✅可直接使用 | ||
loongtomoka | 日语女 | loongtomoka_v2 | 日语 | ❌ | ✅可直接使用 | ||
loongtomoya | 日语男 | loongtomoya_v2 | 日语 | ❌ | ✅可直接使用 |
cosyvoice-v1
音色 | 音频试听(右键保存音频) | voice参数 | 适用场景 | 语言 |
龙婉 | longwan | 语音助手、 导航播报、 聊天数字人 | 中文普通话 | |
龙橙 | longcheng | 语音助手、 导航播报、 聊天数字人 | 中文普通话 | |
龙华 | longhua | 语音助手、 导航播报、 聊天数字人 | 中文普通话 | |
龙小淳 | longxiaochun | 语音助手、 导航播报、 聊天数字人 | 中文普通话+英文 | |
龙小夏 | longxiaoxia | 语音助手、聊天数字人 | 中文普通话 | |
龙小诚 | longxiaocheng | 语音助手、导航播报、聊天数字人 | 中文普通话+英文 | |
龙小白 | longxiaobai | 聊天数字人、有声书、语音助手 | 中文普通话 | |
龙老铁 | longlaotie | 新闻播报、有声书、语音助手、直播带货、导航播报 | 中文东北口音 | |
龙书 | longshu | 有声书、语音助手、导航播报、新闻播报、智能客服 | 中文普通话 | |
龙硕 | longshuo | 语音助手、导航播报、新闻播报、客服催收 | 中文普通话 | |
龙婧 | longjing | 语音助手、导航播报、新闻播报、客服催收 | 中文普通话 | |
龙妙 | longmiao | 客服催收、导航播报、有声书、语音助手 | 中文普通话 | |
龙悦 | longyue | 语音助手、诗词朗诵、有声书朗读、导航播报、新闻播报、客服催收 | 中文普通话 | |
龙媛 | longyuan | 有声书、语音助手、聊天数字人 | 中文普通话 | |
龙飞 | longfei | 会议播报、新闻播报、有声书 | 中文普通话 | |
龙杰力豆 | longjielidou | 新闻播报、有声书、聊天助手 | 中文普通话+英文 | |
龙彤 | longtong | 有声书、导航播报、聊天数字人 | 中文普通话 | |
龙祥 | longxiang | 新闻播报、有声书、导航播报 | 中文普通话 | |
Stella | loongstella | 语音助手、直播带货、导航播报、客服催收、有声书 | 中文普通话+英文 | |
Bella | loongbella | 语音助手、客服催收、新闻播报、导航播报 | 中文普通话 |
常见问题
功能特性/计量计费/限流
Q:我想了解CosyVoice的功能特性、计量计费、限流等信息,应该去哪里查看?
以上信息可在语音合成(CosyVoice)中查看。
Q:当遇到发音不准的情况时,有什么解决方案可以尝试?
通过SSML可以对语音合成效果进行个性化定制。
Q:当前RPS(Requests Per Second)无法满足实际业务需求,该怎么办?如何扩容?是否收费?
Q:如何指定待合成语音的语种?
待合成语音的语种无法通过请求参数进行指定,若您想合成指定语种的语音,请参见音色列表,根据音色的“语言”选择合适的音色进行合成。
Q:cosyvoice-v1 和 cosyvoice-v2 有什么区别?计费方式是否不同?
v1 和 v2 在编码方式上相同,但使用时需注意请求参数 model
和 voice
的设置需匹配实际版本(如 v2 模型需使用 v2 音色,否则会报错)。
v1 和 v2 的计费方式完全一致。
Q:为什么使用WebSocket协议而非HTTP/HTTPS协议?为什么不提供RESTful API?
语音服务选择 WebSocket 而非 HTTP/HTTPS/RESTful,根本在于其依赖全双工通信能力——WebSocket 允许服务端与客户端主动双向传输数据(如实时推送语音合成/识别进度),而基于 HTTP 的 RESTful 仅支持客户端发起的单向请求-响应模式,无法满足实时交互需求。
Q:语音合成是按文本字符数计费的,要如何查看或获取每次合成的文本长度?
通过服务端返回的result-generated事件中payload.usage.characters
参数获取字符数,请以收到的最后一个result-generated事件为准。
故障排查
Q:如何获取Request ID?
通过以下两种方式可以获取:
解析result-generated事件中服务端返回的信息。
解析task-finished事件中服务端返回的信息。
Q:使用SSML功能失败是什么原因?
请按以下步骤排查:
确保当前音色支持SSML功能(声音复刻音色不支持SSML)
确保
model
参数值为cosyvoice-v2
确保用正确的方式进行调用,详情请参见SSML标记语言支持说明
确保待合成文本为纯文本格式且符合格式要求,详情请参见SSML标记语言介绍
Q:为什么音频无法播放?
请根据以下场景逐一排查:
音频保存为完整文件(如xx.mp3)的情况
音频格式一致性:确保请求参数中设置的音频格式与文件后缀一致。例如,如果请求参数设置的音频格式为wav,但文件后缀为mp3,可能会导致播放失败。
播放器兼容性:确认使用的播放器是否支持该音频文件的格式和采样率。例如,某些播放器可能不支持高采样率或特定编码的音频文件。
流式播放音频的情况
将音频流保存为完整文件,尝试使用播放器播放。如果文件无法播放,请参考场景 1 的排查方法。
如果文件可以正常播放,则问题可能出在流式播放的实现上。请确认使用的播放器是否支持流式播放。
常见的支持流式播放的工具和库包括:ffmpeg、pyaudio (Python)、AudioFormat (Java)、MediaSource (Javascript)等。
Q:为什么音频播放卡顿?
请根据以下场景逐一排查:
音频保存为完整文件(如xx.mp3)的情况
请加入开发者群,并提供Request ID,以便我们为您排查问题。
流式播放音频的情况
检查文本发送速度: 确保发送文本的间隔合理,避免前一句音频播放完毕后,下一句文本未能及时发送。
检查回调函数性能:
检查回调函数中是否存在过多业务逻辑,导致阻塞。
回调函数运行在 WebSocket 线程中,若被阻塞,可能会影响 WebSocket 接收网络数据包,进而导致音频接收卡顿。
建议将音频数据写入一个独立的音频缓冲区(audio buffer),然后在其他线程中读取并处理,避免阻塞 WebSocket 线程。
检查网络稳定性: 确保网络连接稳定,避免因网络波动导致音频传输中断或延迟。
进一步排查: 如果以上方法仍未解决问题,请加入开发者群,并提供Request ID,以便我们为您进一步排查问题。
Q:语音合成慢(合成时间长)是什么原因?
请按以下步骤排查:
检查输入间隔
如果是流式语音合成,请确认文字发送间隔是否过长(如上段发出后延迟数秒才发送下段),过久间隔会导致合成总时长增加。
分析性能指标
若首包延迟不符合如下要求,请提交Request ID给技术团队进行排查。
首包延迟:正常500ms左右。
RTF(RTF = 合成总耗时/音频时长):正常0.3左右。
Q:合成的语音发音错误如何处理?
若当前使用的模型为cosyvoice-v1,推荐使用cosyvoice-v2,v2效果更好且支持SSML。
若当前使用的模型为cosyvoice-v2,请使用SSML的<phoneme>标签指定正确的发音。
Q:为什么没有返回语音?为什么结尾部分的文本没能成功转换成语音?(合成语音缺失)
请确认是否忘记发送finish-task指令。在语音合成过程中,服务端会在缓存足够文本后才开始合成。如果忘记发送finish-task指令,可能会导致缓存中的结尾部分文本未能被合成为语音。
Q:为什么返回的音频流顺序错乱?导致播放内容混乱
请从以下两个方面排查:
确保同一个合成任务的 run-task指令、continue-task指令和finish-task指令使用相同的
task_id
。检查异步操作是否导致音频文件写入顺序与接收二进制数据的顺序不一致。
权限与认证
Q:我希望我的 API Key 仅用于 CosyVoice 语音合成服务,而不被百炼其他模型使用(权限隔离),我该如何做?
可以通过新建业务空间并只授权特定模型来限制API Key的使用范围。详情请参见业务空间管理。
Q:使用子业务空间的API Key是否可以调用CosyVoice模型?
对于默认业务空间,cosyvoice-v1
和cosyvoice-v2
均可调用。
对于子业务空间:需要为API Key对应的子业务空间进行模型授权,详情请参见子业务空间的模型调用。
更多问题
请参见GitHub QA。