本文档提供了语音合成CosyVoice Android SDK的详细使用指南,帮助您将文本转换为高质量、富有表现力的语音。
用户指南:关于模型介绍和选型建议请参见语音合成-CosyVoice。
模型与价格
在资源与预算允许的情况下,优先选择 cosyvoice-v3-plus 获取最佳合成效果,对成本敏感时可选 cosyvoice-v3 平衡质量与价格,其余版本仅建议在兼容或低要求场景使用。
模型名称 | 单价 | 免费额度(注) |
cosyvoice-v3.5-plus | 1.5元/万字符 | 1万字符 有效期:阿里云百炼开通后90天内 |
cosyvoice-v3.5-flash | 0.8元/万字符 | |
cosyvoice-v3-plus | 2元/万字符 | |
cosyvoice-v3-flash | 1元/万字符 | |
cosyvoice-v2 | 2元/万字符 | |
cosyvoice-v1 |
文本字符计算规则:
汉字(包括简/繁体汉字、日文汉字和韩文汉字)按2个字符计算,其他所有字符(如标点符号、字母、数字、日韩文假名/谚文等)均按 1个字符计算
计算文本长度时,不包含SSML 标签内容
示例:
"你好"→ 2(你)+2(好)=4字符"中A文123"→ 2(中)+1(A)+2(文)+1(1)+1(2)+1(3)=8字符"中文。"→ 2(中)+2(文)+1(。)=5字符"中 文。"→ 2(中)+1(空格)+2(文)+1(。)=6字符"<speak>你好</speak>"→ 2(你)+2(好)=4字符
限制与约束
文本长度限制
一次性输入待合成文本:发送文本长度不得超过 20000 字符。
流式输入待合成文本:单次发送文本长度不得超过 20000 字符,且累计发送文本总长度不得超过 20 万字符。
文本编码格式
需采用UTF-8编码。
快速开始
获取API Key:获取API Key,为安全起见,推荐将API Key配置到环境变量。
说明当您需要为第三方应用或用户提供临时访问权限,或者希望严格控制敏感数据访问、删除等高风险操作时,建议使用临时API Key。临时API Key拥有固定的60秒有效期,过期后需重新获取。
下载SDK并运行示例代码:
解压 ZIP 包。在
app/libs目录中获取 AAR 格式 SDK,并添加到项目依赖。
需要 Android CPP 接入时,使用 ZIP 包内的android_libs与android_include获取动态库和头文件。用 Android Studio 打开工程。示例代码位于
DashCosyVoiceStreamTtsActivity.java,替换 API Key 后体验功能。
调用方式
调用方式 | 说明 |
一次性输入待合成文本 | 调用步骤:
适用场景:
|
流式输入待合成文本 | 调用步骤:
适用场景:
|
请求参数
连接与控制参数
通过在startStreamInputTts、playStreamInputTts和asyncPlayStreamInputTts接口的ticket参数中传入一个JSON字符串来配置。
参数示例:以下为 JSON 字符串示例,参数未完整列出。请按实际需求在编码时补充:
{ "url": "wss://dashscope.aliyuncs.com/api-ws/v1/inference", "apikey": "st-****", "device_id": "my_device_id" }参数说明
参数
类型
是否必须
说明
urlString是
服务地址,固定为
wss://dashscope.aliyuncs.com/api-ws/v1/inference。apikeyString是
API Key。建议使用时效性短、安全性更高的临时API Key,以降低长期有效Key泄露的风险。
device_idString是
用于标识终端用户的唯一字符串,可设为应用内用户ID或客户端生成的设备唯一标识符。此ID主要用于日志追踪和问题排查。
complete_waiting_msint否
调用stop接口后,等待合成完成事件(STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE)的超时时间(毫秒)。
默认值:10000。
debug_pathString否
日志文件的存储路径。
此参数仅在调用startStreamInputTts、playStreamInputTts或asyncPlayStreamInputTts接口时将
save_log设为true时生效。此时必须设置日志文件路径,否则将报错。本地最多保留两个日志文件。
max_log_file_sizeint否
设定日志文件的最大字节数。
此参数仅在调用startStreamInputTts、playStreamInputTts或asyncPlayStreamInputTts接口时将
save_log设为true时生效。默认值:104857600(100 * 1024 * 1024 字节, 即 100MiB)。
log_track_levelint否
控制通过日志回调(
onStreamInputTtsLogTrackCallback)对外发送的日志内容的过滤级别。默认值:2。
取值范围:
0:LOG_LEVEL_VERBOSE
1:LOG_LEVEL_DEBUG
2:LOG_LEVEL_INFO
3:LOG_LEVEL_WARNING
4:LOG_LEVEL_ERROR
5:LOG_LEVEL_NONE(表示关闭此功能)
注意:
log_track_level与log_level(通过startStreamInputTts、playStreamInputTts或asyncPlayStreamInputTts接口设置)共同决定最终回调的日志。一条日志的级别数值必须同时大于或等于log_track_level和log_level的值,才会被回调。例如,log_track_level设为2 (INFO),log_level设为3 (WARNING),则只有WARNING及以上级别(数值>=3)的日志才会被回调。
语音合成效果参数
通过在startStreamInputTts、playStreamInputTts和asyncPlayStreamInputTts接口的parameters参数中传入一个JSON 字符串来配置。
参数示例:以下为 JSON 字符串示例,参数未完整列出。请按实际需求在编码时补充:
{ "model": "cosyvoice-v2", "voice": "longxiaochun_v2", "format": "mp3", "sample_rate": 24000, "volume": 50, "rate": 1, "pitch": 1, "language_hints": ["zh"] }参数说明
参数
类型
是否必须
说明
modelString是
语音合成模型。
不同模型版本需要使用对应版本的音色:
cosyvoice-v3.5-flash/cosyvoice-v3.5-plus:无系统音色,仅支持使用声音设计/复刻音色。
cosyvoice-v3-flash/cosyvoice-v3-plus:使用longanyang等音色。
cosyvoice-v2:使用longxiaochun_v2等音色。
cosyvoice-v1:使用longwan等音色。
完整音色列表请参见音色列表。
voiceString是
语音合成所使用的音色。
支持系统音色和复刻音色:
formatString否
音频编码格式。
默认值:mp3。
取值范围:pcm/wav/mp3/opus(当
model为cosyvoice-v1时,不支持opus格式)。volumeint否
音量。
默认值:50。
取值范围:[0, 100]。50代表标准音量。音量大小与该值呈线性关系,0为静音,100为最大音量。
sample_rateint否
采样率(单位Hz)。
默认值:22050。
取值范围:8000/16000/22050/24000/44100/48000。
ratefloat否
语速。
默认值:1.0。
取值范围:[0.5, 2.0]。1.0为标准语速,小于1.0则减慢,大于1.0则加快。
pitchfloat否
音高。该值作为音高调节的乘数,但其与听感上的音高变化并非严格的线性或对数关系,建议通过测试选择合适的值。
默认值:1.0。
取值范围:[0.5, 2.0]。1.0为音色自然音高。大于1.0则音高变高,小于1.0则音高变低。
bit_rateint否
音频码率(单位kbps)。音频格式为opus时,支持通过
bit_rate参数调整码率。默认值:32。
取值范围:[6, 510]。
cosyvoice-v1模型不支持该参数。enable_ssmlboolean否
是否开启SSML功能。
默认值:false。
true:开启。
false:关闭。
word_timestamp_enabledboolean否
是否开启字级别时间戳。
默认值:false。
true:开启。
false:关闭。
该功能仅适用于cosyvoice-v3-flash、cosyvoice-v3-plus和cosyvoice-v2模型的复刻音色,以及音色列表中标记为支持的系统音色。
时间戳结果在INativeStreamInputTtsCallback的all_response中。
seedint否
生成时使用的随机数种子,使合成的效果产生变化。在模型版本、文本、音色及其他参数均相同的前提下,使用相同的seed可复现相同的合成结果。
默认值0。
取值范围:[0, 65535]。
cosyvoice-v1不支持该功能。
language_hintsString[]否
指定语音合成的目标语言,提升合成效果。cosyvoice-v1不支持该功能。
当数字、缩写、符号等朗读方式或者小语种合成效果不符合预期时使用,例如:
数字朗读方式不符合预期,“hello, this is 110”读成“hello, this is one one zero”而非“hello, this is 幺幺零”
符号朗读不准确,“@”读成“艾特”而非“at”
小语种合成效果差,合成不自然
取值范围:
zh:中文
en:英文
fr:法语
de:德语
ja:日语
ko:韩语
ru:俄语
pt:葡萄牙语
th:泰语
id:印尼语
vi:越南语
注意:此参数为数组,但当前版本仅处理第一个元素,因此建议只传入一个值。
重要此参数用于指定语音合成的目标语言,该设置与声音复刻时的样本音频的语种无关。如果您需要设置复刻任务的源语言,请参见CosyVoice声音复刻/设计API。
instructionString否
设置指令,用于控制方言、情感或角色等合成效果。该功能仅适用于cosyvoice-v3.5-flash、cosyvoice-v3.5-plus和cosyvoice-v3-flash模型的复刻音色,以及音色列表中标记为支持Instruct的系统音色。
长度限制:100字符。
汉字(包括简/繁体汉字、日文汉字和韩文汉字)按2个字符计算,其他所有字符(如标点符号、字母、数字、日韩文假名/谚文等)均按 1个字符计算
使用要求(因模型而异):
cosyvoice-v3.5-flash和cosyvoice-v3.5-plus:可以输入任意指令控制合成效果(如情感、语速等)
重要cosyvoice-v3.5-flash和cosyvoice-v3.5-plus无系统音色,仅支持使用声音设计/复刻音色。
指令示例:
请用非常激昂且高亢的语气说话,表现出获得重大成功后的狂喜与激动。 语速请保持中等偏慢,语气要显得优雅、知性,给人以从容不迫的安心感。 语气要充满哀伤与怀念,带有轻微的鼻音,仿佛正在诉说一段令人心碎的往事。 请尝试用气声说话,音量极轻,营造出一种在耳边亲密低语的神秘感。 语气要显得非常急躁且不耐烦,语速加快,句子之间的停顿要尽量缩短。 请模拟一位慈祥、温和的长辈,语速平稳,声音中要透出满满的关怀与爱意。 语气要充满讽刺和不屑,在关键词上加重读音,句尾语调略微上扬。 请用一种极度恐惧且颤抖的声音说话。 语气要像专业的新闻播音员一样,冷静、客观且字正腔圆,情绪保持中立。 语气要显得活泼俏皮,带着明显的笑意,让声音听起来充满朝气与阳光。cosyvoice-v3-flash:需遵照如下要求
复刻音色:可使用任意自然语言控制语音合成效果。
指令示例:
请用广东话表达。(支持的方言:广东话、东北话、甘肃话、贵州话、河南话、湖北话、江西话、闽南话、宁夏话、山西话、陕西话、山东话、上海话、四川话、天津话、云南话。) 请尽可能非常大声地说一句话。 请用尽可能慢地语速说一句话。 请用尽可能快地语速说一句话。 请非常轻声地说一句话。 你可以慢一点说吗 你可以非常快一点说吗 你可以非常慢一点说吗 你可以快一点说吗 请非常生气地说一句话。 请非常开心地说一句话。 请非常恐惧地说一句话。 请非常伤心地说一句话。 请非常惊讶地说一句话。 请尽可能表现出坚定的感觉。 请尽可能表现出愤怒的感觉。 请尝试一下亲和的语调。 请用冷酷的语调讲话。 请用威严的语调讲话。 我想体验一下自然的语气。 我想看看你如何表达威胁。 我想看看你怎么表现智慧。 我想看看你怎么表现诱惑。 我想听听用活泼的方式说话。 我想听听你用激昂的感觉说话。 我想听听用沉稳的方式说话的样子。 我想听听你用自信的感觉说话。 你能用兴奋的感觉和我交流吗? 你能否展示狂傲的情绪表达? 你能展现一下优雅的情绪吗? 你可以用幸福的方式回答问题吗? 你可以做一个温柔的情感演示吗? 能用冷静的语调和我谈谈吗? 能用深沉的方法回答我吗? 能用粗犷的情绪态度和我对话吗? 用阴森的声音告诉我这个答案。 用坚韧的声音告诉我这个答案。 用自然亲切的闲聊风格叙述。 用广播剧博客主的语气讲话。系统音色:指令必须使用固定格式和内容,详情请参见音色列表
enable_aigc_tag
boolean否
是否在生成的音频中添加AIGC隐性标识。设置为true时,会将隐性标识嵌入到支持格式(wav/mp3/opus)的音频中。
默认值:false。
仅cosyvoice-v3-flash、cosyvoice-v3-plus、cosyvoice-v2支持该功能。
aigc_propagator
String否
设置AIGC隐性标识中的
ContentPropagator字段,用于标识内容的传播者。仅在enable_aigc_tag为true时生效。默认值:阿里云UID。
仅cosyvoice-v3-flash、cosyvoice-v3-plus、cosyvoice-v2支持该功能。
aigc_propagate_id
String否
设置AIGC隐性标识中的
PropagateID字段,用于唯一标识一次具体的传播行为。仅在enable_aigc_tag为true时生效。默认值:本次语音合成请求Request ID。
仅cosyvoice-v3-flash、cosyvoice-v3-plus、cosyvoice-v2支持该功能。
关键接口
NativeNui
startStreamInputTts
启动双向流式语音合成,建立与服务端的连接,并注册回调以接收事件和音频数据。
此接口可能会引起阻塞,应在非UI线程调用。
方法签名
public synchronized int startStreamInputTts(INativeStreamInputTtsCallback callback, String ticket, String parameters, String session_id, int log_level, boolean save_log)参数说明
参数
类型
说明
callback事件和数据回调接口的实现。
ticketStringJSON字符串,包含鉴权、连接和调试参数。参见连接与控制参数。
parametersStringJSON字符串,包含语音合成的具体效果参数。参见语音合成效果参数。
session_idString客户端指定的会话ID。若不传入,服务端将自动生成。
log_levelint控制SDK自身日志的打印级别。
取值范围:
0:LOG_LEVEL_VERBOSE
1:LOG_LEVEL_DEBUG
2:LOG_LEVEL_INFO
3:LOG_LEVEL_WARNING
4:LOG_LEVEL_ERROR
5:LOG_LEVEL_NONE(表示关闭此功能)
save_logboolean是否保存本地日志。若为true,须在连接与控制参数中通过
debug_path指定路径,并可通过max_log_file_size设置文件大小。返回值说明
返回错误码,参见错误码查询。
sendStreamInputTts
发送待合成的文本,与 startStreamInputTts 搭配使用。
在调用 startStreamInputTts 后,使用此接口持续发送文本。
所有文本发送完毕后,需调用stopStreamInputTts或asyncStopStreamInputTts来结束发送。
stopStreamInputTts
同步接口,通知服务端文本已全部发送,并阻塞等待所有音频数据合成并收到 STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE。
阻塞等待的超时时间由参数 complete_waiting_ms 控制。
方法签名
public synchronized int stopStreamInputTts()返回值说明
返回错误码,参见错误码查询。
asyncStopStreamInputTts
异步接口,通知服务端文本已全部发送。调用后立即返回,合成在后台继续进行。
通过 STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE 事件判断合成是否完成。
方法签名
public synchronized int asyncStopStreamInputTts()返回值说明
返回错误码,参见错误码查询。
cancelStreamInputTts
立即中断与服务端的连接并终止当前合成任务。调用后不会再收到任何音频数据回调。
方法签名
public synchronized int cancelStreamInputTts()返回值说明
返回错误码,参见错误码查询。
playStreamInputTts
同步执行的一次性合成接口。该接口会发送文本、阻塞并等待接收所有音频数据,直到合成完成后才返回。无需再调用stop接口。
该接口默认启用SSML。如果在语音合成效果参数中显式设置enable_ssml,则以用户设置为准。
此接口应在非UI线程调用。
方法签名
public synchronized int playStreamInputTts(INativeStreamInputTtsCallback callback, String ticket, String parameters, String text, String session_id, int log_level, boolean save_log)参数说明
callback、ticket等参数与startStreamInputTts接口中的定义相同。
参数
类型
说明
textString待合成文本。支持SSML。
返回值说明
返回错误码,参见错误码查询。
asyncPlayStreamInputTts
异步执行的一次性合成接口。调用后立即返回,合成任务在后台进行,结果通过回调返回。无需再调用stop接口。
该接口默认启用SSML。如果在语音合成效果参数中显式设置enable_ssml,则以用户设置为准。
方法签名
public synchronized int asyncPlayStreamInputTts(INativeStreamInputTtsCallback callback, String ticket, String parameters, String text, String session_id, int log_level, boolean save_log)参数说明
callback、ticket等参数与startStreamInputTts接口中的定义相同。
参数
类型
说明
textString待合成文本。支持SSML。
返回值说明
返回错误码,参见错误码查询。
INativeStreamInputTtsCallback:监听回调
onStreamInputTtsEventCallback:监听事件
方法签名
void onStreamInputTtsEventCallback(StreamInputTtsEvent event, String task_id, String session_id, int ret_code, String error_msg, String timestamp, String all_response);参数说明
参数
类型
说明
event回调事件。
task_idString语音合成任务ID。
session_idString会话ID。客户端传入则原样返回;未传入时由服务端生成。
ret_codeint错误码,仅在事件 STREAM_INPUT_TTS_EVENT_TASK_FAILED 中有效。参见错误码查询。
error_msgString错误信息,仅在事件 STREAM_INPUT_TTS_EVENT_TASK_FAILED 中有效。
timestampString合成结果的时间戳信息。
all_responseString完整的 JSON 字符串响应。可解析以获取所需数据。
onStreamInputTtsDataCallback:监听音频数据
合成过程中,SDK 会连续触发此回调,需在回调中获取音频数据。
方法签名
void onStreamInputTtsDataCallback(byte[] data);参数说明
参数
类型
说明
databyte[]返回当前片段的音频数据,可用于:
合成完整的音频文件并播放。
通过支持流式播放的播放器实时播放。
注意:
对 mp3/opus 压缩格式,分段传输必须使用流式播放器,不能逐帧播放,否则可能解码失败。
组装完整文件时需采用追加模式写入同一文件。
对于 wav 和 mp3 格式,仅在第一次 onStreamInputTtsDataCallback 回调的数据中包含文件头,后续回调均为纯音频数据。处理时需将所有回调的
buffer按顺序拼接。opus 格式的每一帧都是独立的 Ogg page,可直接拼接。
onStreamInputTtsLogTrackCallback:监听追踪日志
此回调用于接收 SDK 内部的详细日志,方便进行问题定位和调试。
default void onStreamInputTtsLogTrackCallback(Constants.LogLevel level, String log)StreamInputTtsEvent:事件类型
事件 | 说明 |
STREAM_INPUT_TTS_EVENT_SYNTHESIS_STARTED | 表示服务端已成功接收请求并开始处理。通常在此事件后, |
STREAM_INPUT_TTS_EVENT_SENTENCE_SYNTHESIS | 语音合成运行过程中的信息,包括计费信息等。 |
STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE | 表示服务端已发送完全部音频数据,此后 |
STREAM_INPUT_TTS_EVENT_TASK_FAILED | 表示任务失败。此时可从INativeStreamInputTtsCallback的all_response获得task_id、error_code、error_message用于判断具体错误。 |
高级功能
SSML 标记语言
目的:通过在文本中嵌入 XML 标签,实现对发音、语速、停顿等细节的精确控制。
使用限制:
模型:仅适用于
cosyvoice-v2模型。调用方式:仅支持一次性输入待合成文本(
playStreamInputTts或asyncPlayStreamInputTts接口),不支持流式输入待合成文本(sendStreamInputTts接口)。
使用方法:调用 playStreamInputTts或asyncPlayStreamInputTts接口时,SDK 会自动启用 SSML,此时直接在 text 参数中传入包含 SSML 标签的文本即可。
详细的标签用法参考 SSML标记语言介绍。
数学表达式
目的:使模型能够正确朗读常见的数学公式和表达式。
使用限制:仅适用于 cosyvoice-v2 模型。
使用方法:直接在 text 参数中传入包含 LaTeX 格式的数学表达式的文本即可。详情参见 LaTeX 公式转语音。