本文档提供了语音合成CosyVoice Android SDK的详细使用指南,帮助您将文本转换为高质量、富有表现力的语音。
用户指南:关于模型介绍和选型建议请参见语音合成-CosyVoice。
模型与价格
在资源与预算允许的情况下,优先选择 cosyvoice-v3-plus 获取最佳合成效果,对成本敏感时可选 cosyvoice-v3 平衡质量与价格,其余版本仅建议在兼容或低要求场景使用。
模型名称 | 单价 | 免费额度 |
cosyvoice-v3-plus | 2元/万字符 | 2025年11月15日0点前开通阿里云百炼:2000字符 2025年11月15日0点后开通阿里云百炼:1万字符 有效期:阿里云百炼开通后90天内 |
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字符
限制与约束
文本长度限制
一次性输入待合成文本:发送文本长度不得超过 2000 字符。
流式输入待合成文本:单次发送文本长度不得超过 2000 字符,且累计发送文本总长度不得超过 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 后体验功能。
调用方式
调用方式 | 说明 |
一次性输入待合成文本 | 调用步骤:
适用场景:
|
流式输入待合成文本 | 调用步骤:
适用场景:
|
仅cosyvoice-v3、cosyvoice-v3-plus支持该功能。
提供语言提示,仅cosyvoice-v3-flash、cosyvoice-v3-plus支持该功能。
在语音合成中有如下作用:
指定 TN(Text Normalization,文本规范化)处理所用的语言,影响数字、缩写、符号等的朗读方式(仅中文、英文生效)。
取值范围:
zh:中文
en:英文
指定语音合成的目标语言(仅限复刻音色),帮助提升合成效果准确性,对英文、法语、德语、日语、韩语、俄语生效(无需填写中文)。须和声音复刻时使用的languageHints/language_hints一致。
取值范围:
en:英文
fr:法语
de:德语
ja:日语
ko:韩语
ru:俄语
若设置的语言提示与文本内容明显不符(如为中文文本设置en),将忽略此提示,并依据文本内容自动检测语言。
注意:此参数为数组,但当前版本仅处理第一个元素,因此建议只传入一个值。
请求参数
连接与控制参数
通过在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是
语音合成模型。
voiceString是
音色。
说明使用声音复刻生成的专属音色时,本请求的
model参数值,必须与创建该音色时所用的模型版本(即target_model参数)完全一致。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]。
enable_ssmlboolean否
是否开启SSML功能。
默认值:false。
true:开启。
false:关闭。
word_timestamp_enabledboolean否
是否开启字级别时间戳。
默认值:false。
true:开启。
false:关闭。
仅cosyvoice-v2支持该功能。
时间戳结果在INativeStreamInputTtsCallback的all_response中。
seedint否
生成时使用的随机数种子,使合成的效果产生变化。在模型版本、文本、音色及其他参数均相同的前提下,使用相同的seed可复现相同的合成结果。
默认值0。
取值范围:[0, 65535]。
cosyvoice-v1不支持该功能。
language_hintsString[]否
提供语言提示,仅cosyvoice-v3-flash、cosyvoice-v3-plus支持该功能。
在语音合成中有如下作用:
指定 TN(Text Normalization,文本规范化)处理所用的语言,影响数字、缩写、符号等的朗读方式(仅中文、英文生效)。
取值范围:
zh:中文
en:英文
指定语音合成的目标语言(仅限复刻音色),帮助提升合成效果准确性,对英文、法语、德语、日语、韩语、俄语生效(无需填写中文)。须和声音复刻时使用的languageHints/language_hints一致。
取值范围:
en:英文
fr:法语
de:德语
ja:日语
ko:韩语
ru:俄语
若设置的语言提示与文本内容明显不符(如为中文文本设置
en),将忽略此提示,并依据文本内容自动检测语言。注意:此参数为数组,但当前版本仅处理第一个元素,因此建议只传入一个值。
instructionString否
设置提示词。仅cosyvoice-v3-flash、cosyvoice-v3-plus支持该功能。
在语音合成中有如下作用:
指定小语种(仅限复刻音色)
格式:“
你会用<小语种>说出来。”(注意,结尾一定不要遗漏句号,使用时将“<小语种>”替换为具体的小语种,例如替换为德语)。示例:“
你会用德语说出来。”支持的小语种:法语、德语、日语、韩语、俄语。
指定方言(仅限复刻音色)
格式:“
请用<方言>表达。”(注意,结尾一定不要遗漏句号,使用时将“<方言>”替换为具体的方言,例如替换为广东话)。示例:“
请用广东话表达。”支持的方言:广东话、东北话、甘肃话、贵州话、河南话、湖北话、江西话、闽南话、宁夏话、山西话、陕西话、山东话、上海话、四川话、天津话、云南话。
指定情感、场景、角色或身份等:仅部分默认音色支持该功能,且因音色而异,详情请参见音色列表
关键接口
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 公式转语音。