本文介绍语音合成CosyVoice Java API的使用。
前提条件
已开通服务并获取API Key。请配置API Key到环境变量,而非硬编码在代码中,防范因代码泄露导致的安全风险。
调用模式
核心类(SpeechSynthesizer)提供了同步调用、异步调用和流式调用等接口。
请根据业务场景选择合适的调用模式:同步适用于短文本即时合成,异步适合长文本处理,流式适用于实时交互场景。
同步调用
同步提交语音合成任务,直接获取完整结果。
配置请求参数。
SpeechSynthesisParam param = SpeechSynthesisParam.builder() .model("cosyvoice-v1") // 指定模型 .voice("longxiaochun") // 设置音色 .build();
// 同步模式:禁用回调(第二个参数为null),禁用回调后,call 方法将阻塞线程直至返回完整音频数据 SpeechSynthesizer synthesizer = new SpeechSynthesizer(param, null);
同步调用。
ByteBuffer audio = synthesizer.call("今天天气怎么样?"); // 阻塞直至音频返回
处理音频数据。
处理音频数据,例如保存到本地。
异步调用
异步提交语音合成任务,通过注册ResultCallback
回调,逐帧接收实时语音分段数据。
配置请求参数。
SpeechSynthesisParam param = SpeechSynthesisParam.builder() .model("cosyvoice-v1") // 指定模型 .voice("longxiaochun") // 设置音色 .build();
// 第二个参数传入回调即启用异步模式 SpeechSynthesizer synthesizer = new SpeechSynthesizer(param, callback);
异步调用。
语音合成的结果在回调接口中处理。
// 非阻塞调用,立即返回null(实际结果通过回调接口异步传递) synthesizer.call("今天天气怎么样?");
流式调用
分多次提交文本,通过注册ResultCallback
回调,逐帧接收实时语音分段数据。
流式输入时可多次调用
streamingCall
按顺序提交文本片段。服务端接收文本片段后自动进行分句:完整语句立即合成
不完整语句缓存至完整后合成
调用
streamingComplete
时,服务端会强制合成所有已接收但未处理的文本片段(包括未完成的句子)。发送文本片段的间隔不得超过23秒,否则触发“request timeout after 23 seconds”异常。
若无待发送文本,需及时调用
streamingComplete
结束任务。服务端强制设定23秒超时机制,客户端无法修改该配置。
配置请求参数。
SpeechSynthesisParam param = SpeechSynthesisParam.builder() .model("cosyvoice-v1") // 指定模型 .voice("longxiaochun") // 设置音色 .build();
SpeechSynthesizer synthesizer = new SpeechSynthesizer( param, // 注入语音参数 callback // 注册事件监听器 );
分片提交文本。
多次调用核心类(SpeechSynthesizer)的
streamingCall
方法分片提交待合成文本。语音合成的结果在回调接口中处理。List<String> textFragments = Arrays.asList("第一段文本", "第二段文本", "[结束标记]"); for (String fragment : textFragments) { synthesizer.streamingCall(fragment); }
文本提交完成后结束任务。
必须调用
streamingComplete()
结束流式任务,否则服务端可能不会返回缓存的剩余音频数据。synthesizer.streamingComplete();
通过Flowable调用
Flowable是一个用于工作流和业务流程管理的开源框架,它基于Apache 2.0许可证发布。关于Flowable的使用,请参见Flowable API详情。
使用Flowable前需确保已集成RxJava库,并了解响应式编程基础概念。
非流式调用
以下示例展示了通过Flowable对象的blockingForEach
接口,阻塞式地获取每次流式返回的SpeechSynthesisResult
类型数据。
您也可以在Flowable的所有流式数据返回完成后,通过核心类(SpeechSynthesizer)的getAudioData
来获取完整的合成结果。
流式调用
以下示例展示了通过Flowable对象作为输入参数,输入文本流。并通过Flowable对象作为返回值,利用的blockingForEach
接口,阻塞式地获取每次流式返回的SpeechSynthesisResult
类型数据。
您也可以在Flowable的所有流式数据返回完成后,通过核心类(SpeechSynthesizer)的getAudioData
来获取完整的合成结果。
高并发调用
在DashScope Java SDK中,采用了OkHttp3的连接池技术,以减少重复建立连接的开销。详情请参见高并发场景。
请求参数
请求参数通过SpeechSynthesisParam
的链式方法进行配置。
参数 | 类型 | 默认值 | 是否必须 | 说明 |
model | String | - | 是 | 指定模型,支持 |
voice | String | - | 是 | 指定音色名称,详情请参见音色列表。 |
format | enum | 若未指定 | 否 | 指定音频编码格式及采样率:
|
volume | int | 50 | 否 | 指定音量,取值范围:0~100。 |
speechRate | float | 1.0 | 否 | 指定语速,取值范围:0.5~2。
|
pitchRate | float | 1.0 | 否 | 指定语调,取值范围:0.5~2。 |
apiKey | String | - | 否 | 指定用户API Key。如已将API Key配置到环境变量,则无须在代码中设置。 |
响应结果
服务器返回二进制音频数据:
同步调用模式:对核心类(SpeechSynthesizer)的
call
方法返回的二进制音频数据进行处理。异步调用或流式调用模式:对回调接口(ResultCallback)的
onEvent
方法的参数(SpeechSynthesisResult
类型)进行处理。SpeechSynthesisResult
的关键接口如下:接口/方法
参数
返回值
描述
public ByteBuffer getAudioFrame()
无
二进制音频数据
返回当前流式合成片段的增量二进制音频数据,可能为空(当无新数据到达时)。
关键接口
回调接口(ResultCallback
)
实现异步监听需继承ResultCallback
抽象类,具备以下特征:
类型化处理:通过泛型
SpeechSynthesisResult
处理结构化数据。事件驱动:专注处理有效业务数据,需实现以下方法:
onEvent(SpeechSynthesisResult result)
:接收实时音频分片(可能为空,参见响应结果)。onComplete()
:任务成功完成时回调。onError(Exception e)
:异常处理,建议记录日志并释放资源。
接口/方法 | 参数 | 返回值 | 描述 |
|
| 无 | 当服务端推送语音合成数据时被异步回调。 |
| 无 | 无 | 当任务完成后被异步回调。 |
|
| 无 | 发生异常时该接口被异步回调。 建议在 |
核心类(SpeechSynthesizer
)
通过“import com.alibaba.dashscope.audio.ttsv2.SpeechSynthesizer;
”方式引入,关键接口如下:
接口/方法 | 参数 | 返回值 | 描述 |
|
|
| 构造函数。 |
|
|
| 非流式发送待合成文本并获取语音合成结果。
|
|
| 无 | 流式发送待合成文本。 您可以多次调用该接口,将待合成文本分多次发送给服务端。 必须在所有 |
| 无 | 无 | 结束流式任务。 该方法阻塞调用线程直至发生以下条件之一:
|
|
| 无 | 结束流式任务。 该方法阻塞调用线程直至发生以下条件之一:
|
| 无 | 无 | 非阻塞结束流式任务。 该方法不会阻塞当前线程,调用该方法后,在回调函数 |
| 无 | 无 | 立即结束流式任务。 |
|
| 合成结果,封装在 | 非流式文本输入实时转换为流式语音输出,合成结果在flowable中流式返回。 |
|
| 合成结果,封装在 | 流式文本输入实时转换为流式语音输出,合成结果在flowable中流式返回。 |
|
| 无 | 更新 |
| 无 | 当前上一个任务的request id | 获取上一个任务的request id,在调用 |
| 无 | 当前任务首包延迟 | 获取当前任务的首包延迟,任务结束后使用。 首包延迟是开始发送文本和接收第一个音频包之间的时间,单位为毫秒。 |
错误码
在使用API过程中,如果调用失败并返回错误信息,请参见错误信息进行解决。
更多示例
更多示例,请参见GitHub。
常见问题
请参见GitHub QA。
音色列表
默认采样率代表当前音色的最佳采样率,缺省条件下默认按照该采样率输出,同时支持降采样或升采样。如龙小淳音色,默认采样率22.05 kHz,使用时可以降采样到8 kHz,但升采样到48 kHz时不会有额外效果提升。
音色 | 音频试听 | 音频下载 | model参数 | voice 参数 | 适用场景 | 语言 | 默认采样率(Hz) | 默认音频格式 |
龙婉 | cosyvoice-v1 | longwan | 语音助手、 导航播报、 聊天数字人 | 中文普通话 | 22050 | mp3 | ||
龙橙 | cosyvoice-v1 | longcheng | 语音助手、 导航播报、 聊天数字人 | 中文普通话 | 22050 | mp3 | ||
龙华 | cosyvoice-v1 | longhua | 语音助手、 导航播报、 聊天数字人 | 中文普通话 | 22050 | mp3 | ||
龙小淳 | cosyvoice-v1 | longxiaochun | 语音助手、 导航播报、 聊天数字人 | 中文+英文 | 22050 | mp3 | ||
龙小夏 | cosyvoice-v1 | longxiaoxia | 语音助手、聊天数字人 | 中文 | 22050 | mp3 | ||
龙小诚 | cosyvoice-v1 | longxiaocheng | 语音助手、导航播报、聊天数字人 | 中文+英文 | 22050 | mp3 | ||
龙小白 | cosyvoice-v1 | longxiaobai | 聊天数字人、有声书、语音助手 | 中文 | 22050 | mp3 | ||
龙老铁 | cosyvoice-v1 | longlaotie | 新闻播报、有声书、语音助手、直播带货、导航播报 | 中文东北口音 | 22050 | mp3 | ||
龙书 | cosyvoice-v1 | longshu | 有声书、语音助手、导航播报、新闻播报、智能客服 | 中文 | 22050 | mp3 | ||
龙硕 | cosyvoice-v1 | longshuo | 语音助手、导航播报、新闻播报、客服催收 | 中文 | 22050 | mp3 | ||
龙婧 | cosyvoice-v1 | longjing | 语音助手、导航播报、新闻播报、客服催收 | 中文 | 22050 | mp3 | ||
龙妙 | cosyvoice-v1 | longmiao | 客服催收、导航播报、有声书、语音助手 | 中文 | 22050 | mp3 | ||
龙悦 | cosyvoice-v1 | longyue | 语音助手、诗词朗诵、有声书朗读、导航播报、新闻播报、客服催收 | 中文 | 22050 | mp3 | ||
龙媛 | cosyvoice-v1 | longyuan | 有声书、语音助手、聊天数字人 | 中文 | 22050 | mp3 | ||
龙飞 | cosyvoice-v1 | longfei | 会议播报、新闻播报、有声书 | 中文 | 22050 | mp3 | ||
龙杰力豆 | cosyvoice-v1 | longjielidou | 新闻播报、有声书、聊天助手 | 中文+英文 | 22050 | mp3 | ||
龙彤 | cosyvoice-v1 | longtong | 有声书、导航播报、聊天数字人 | 中文 | 22050 | mp3 | ||
龙祥 | cosyvoice-v1 | longxiang | 新闻播报、有声书、导航播报 | 中文 | 22050 | mp3 | ||
Stella | cosyvoice-v1 | loongstella | 语音助手、直播带货、导航播报、客服催收、有声书 | 中文+英文 | 22050 | mp3 | ||
Bella | cosyvoice-v1 | loongbella | 语音助手、客服催收、新闻播报、导航播报 | 中文 | 22050 | mp3 |
升级CosyVoice2.0说明
部分音色支持升级使用CosyVoice2.0模型,升级方法:
model
字段替换为"cosyvoice-v2"voice
字段使用CosyVoice2.0音色
升级后调用方法和计费不变,默认QPS为3。支持升级的音色包括:
升级前voice参数 | 升级后voice参数 |
longcheng | longcheng_v2 |
longhua | longhua_v2 |
longshu | longshu_v2 |
loongbella | loongbella_v2 |
longwan | longwan_v2 |
longxiaochun | longxiaochun_v2 |
longxiaoxia | longxiaoxia_v2 |
更多的音色会陆续上线,敬请期待。
目前cosyvoice-v2服务只支持使用主账号调用。