语音合成为您提供将输入文本合成为语音二进制数据的功能。本文档介绍了当前目录下各SDK文档的通用信息。
功能介绍
-
支持输出PCM、WAV和MP3编码格式数据。
-
支持设置语速、语调和音量。
-
支持一次性合成300字符以内的文字,其中1个汉字、1个英文字母、1个标点或1个句子中间空格均算作1个字符,超过300个字符的内容将会截断。
-
仅支持采用UTF-8编码的文本输入。
-
如果生僻字发音不准,可使用SSML的
<phoneme>标签指定拼音,或替换为同音字。
-
字级别音素边界接口:语音合成服务在输出音频的同时,可输出每个汉字/英文单词在音频中的时间位置,即时间戳。该时间信息可用于驱动虚拟人口型、做视频配音字幕等。详情请参见语音合成时间戳功能介绍。
-
使用 TTS 预设音色替换视频或音频中的原始音轨:
-
调用 TTS API 生成语音文件,通过
voice参数指定音色。如需时间戳同步,设置enable_subtitle=true 并选择支持时间戳的发音人(如 siqi、siyue、sicheng),默认发音人 xiaoyun 不支持。时间戳仅通过WebSocket协议返回。 -
使用 ffmpeg 将音频与视频合成:
ffmpeg -i input.mp4 -i tts_output.wav -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 output.mp4。
-
服务地址
|
访问类型 |
说明 |
URL |
|
外网访问 |
所有服务器均可通过外网访问URL调用服务。SDK默认使用该URL。 |
|
交互流程
-
上图描述的是WebSocket的交互流程,关于RESTful API的交互流程图请参见RESTful API。
-
服务端的响应除了音频流之外,都会在返回信息的header包含本次识别任务的task_id参数,是本次请求的唯一标识。
-
如果您希望实时播放服务端返回的音频流,请使用支持流式播放的音频播放器。支持流式播放的播放器包括:ffmpeg、pyaudio(Python)、AudioFormat(Java)和MediaSource(JavaScript)等。
-
鉴权
客户端与服务端建立WebSocket连接时,使用Token进行鉴权。
-
开始合成
客户端发起语音合成请求,在请求消息中进行参数设置,各参数含义如下表所示。
参数
类型
是否必需
说明
appkey
String
是
管控台创建的项目Appkey。
text
String
是
待合成文本,文本内容必须采用UTF-8编码,长度不超过300个字符(英文字母之间需要添加空格)。
说明只有支持多情感的音色,才能使用<emotion>标签,否则会报错:Illegal ssml text。
voice
String
否
发音人,默认是
xiaoyun。format
String
否
音频编码格式,支持.pcm、.wav和.mp3格式。默认值:
pcm。sample_rate
Integer
否
音频采样率,默认值:16000 Hz。
volume
Integer
否
音量,取值范围:0~100。默认值:50。
speech_rate
Integer
否
语速,取值范围:-500~500,默认值:0。
[-500, 0, 500] 对应的语速倍速区间为 [0.5, 1.0, 2.0]。
-
-500表示默认语速的0.5倍速。
-
0表示默认语速的1倍速。1倍速是指模型默认输出的合成语速,语速会依据每一个发音人略有不同,大概每秒钟4个字左右。
-
500表示默认语速的2倍速。
计算方法如下:
-
0.8倍速(1-1/0.8)/0.002 = -125
-
1.2倍速(1-1/1.2)/0.001 = 166
说明-
小于1倍速时,使用0.002系数。
-
大于1倍速时,使用0.001系数。
实际算法结果取近似值。
pitch_rate
Integer
否
语调,取值范围:-500~500,默认值:0。
enable_subtitle
Boolean
否
开启字级别时间戳。更多使用方法,请参见语音合成时间戳功能介绍。
-
-
接收合成数据
服务端返回合成的语音二进制数据,SDK接收并处理二进制数据。
-
结束合成
语音合成完毕,服务端发送合成完毕事件通知,举例如下。
{ "header": { "message_id": "05450bf69c53413f8d88aed1ee60****", "task_id": "640bc797bb684bd6960185651307****", "namespace": "SpeechSynthesizer", "name": "SynthesisCompleted", "status": 20000000, "status_message": "GATEWAY|SUCCESS|Success." } }说明文档示例将合成的音频保存在文件中,如果您需要播放音频且对实时性要求较高,建议使用流式播放,即边接收语音数据边播放,减少延时。
-
合成失败处理
当因为参数或其他原因导致合成任务失败时,会收到任务失败(TaskFailed)通知,举例如下。收到任务失败通知后,对应底层连接将断开。
{ "header":{ "namespace":"Default", "name":"TaskFailed", "status":41020001, "message_id":"62c126f7d9b340deb82b5b7eaca0****", "task_id":"4552df26d1f547aab9a2c4a94678****", "status_text":"TTS:TtsClientError:[tts]Engine return error code: 418" } }
音色列表
|
名称 |
voice参数值 |
类型 |
适用场景 |
支持语言 |
支持采样率(Hz) |
支持字级别音素边界接口 |
备注 |
|
小云 |
Xiaoyun |
标准女声 |
通用场景 |
中文及中英文混合场景 |
8K/16K |
否 |
无 |
|
小刚 |
Xiaogang |
标准男声 |
通用场景 |
中文及中英文混合场景 |
8K/16K |
否 |
无 |
|
若兮 |
Ruoxi |
温柔女声 |
通用场景 |
中文及中英文混合场景 |
8K/16K/24K |
否 |
无 |
|
思琪 |
Siqi |
温柔女声 |
通用场景 |
中文及中英文混合场景 |
8K/16K/24K |
是 |
无 |
|
思佳 |
Sijia |
标准女声 |
通用场景 |
中文及中英文混合场景 |
8K/16K/24K |
否 |
无 |
|
思诚 |
Sicheng |
标准男声 |
通用场景 |
中文及中英文混合场景 |
8K/16K/24K |
是 |
无 |
|
艾琪 |
Aiqi |
温柔女声 |
通用场景 |
中文及中英文混合场景 |
8K/16K |
是 |
无 |
|
艾佳 |
Aijia |
标准女声 |
通用场景 |
中文及中英文混合场景 |
8K/16K |
是 |
无 |
|
艾诚 |
Aicheng |
标准男声 |
通用场景 |
中文及中英文混合场景 |
8K/16K |
是 |
无 |
|
艾达 |
Aida |
标准男声 |
通用场景 |
中文及中英文混合场景 |
8K/16K |
是 |
无 |
|
宁儿 |
Ninger |
标准女声 |
通用场景 |
纯中文场景 |
8K/16K/24K |
否 |
无 |
|
瑞琳 |
Ruilin |
标准女声 |
通用场景 |
纯中文场景 |
8K/16K/24K |
否 |
无 |
|
思悦 |
Siyue |
温柔女声 |
客服场景 |
中文及中英文混合场景 |
8K/16K/24K |
是 |
无 |
|
艾雅 |
Aiya |
严厉女声 |
客服场景 |
中文及中英文混合场景 |
8K/16K |
是 |
无 |
|
艾夏 |
Aixia |
亲和女声 |
客服场景 |
中文及中英文混合场景 |
8K/16K |
是 |
无 |
|
艾美 |
Aimei |
甜美女声 |
客服场景 |
中文及中英文混合场景 |
8K/16K |
是 |
无 |
|
艾雨 |
Aiyu |
自然女声 |
客服场景 |
中文及中英文混合场景 |
8K/16K |
是 |
无 |
|
艾悦 |
Aiyue |
温柔女声 |
客服场景 |
中文及中英文混合场景 |
8K/16K |
是 |
无 |
|
艾婧 |
Aijing |
严厉女声 |
客服场景 |
中文及中英文混合场景 |
8K/16K |
是 |
无 |
|
小美 |
Xiaomei |
甜美女声 |
客服场景 |
中文及中英文混合场景 |
8K/16K/24K |
否 |
无 |
|
艾娜 |
Aina |
浙普女声 |
客服场景 |
纯中文场景 |
8K/16K |
是 |
无 |
|
伊娜 |
Yina |
浙普女声 |
客服场景 |
纯中文场景 |
8K/16K/24K |
否 |
无 |
|
思婧 |
Sijing |
严厉女声 |
客服场景 |
纯中文场景 |
8K/16K/24K |
是 |
无 |
|
思彤 |
Sitong |
儿童音 |
童声场景 |
纯中文场景 |
8K/16K/24K |
否 |
无 |
|
小北 |
Xiaobei |
萝莉女声 |
童声场景 |
纯中文场景 |
8K/16K/24K |
是 |
无 |
|
艾彤 |
Aitong |
儿童音 |
童声场景 |
纯中文场景 |
8K/16K |
是 |
无 |
|
艾薇 |
Aiwei |
萝莉女声 |
童声场景 |
纯中文场景 |
8K/16K |
是 |
无 |
|
艾宝 |
Aibao |
萝莉女声 |
童声场景 |
纯中文场景 |
8K/16K |
是 |
无 |
|
Harry |
Harry |
英音男声 |
英文场景 |
英文场景 |
8K/16K |
否 |
无 |
|
Abby |
Abby |
美音女声 |
英文场景 |
英文场景 |
8K/16K |
否 |
无 |
|
Andy |
Andy |
美音男声 |
英文场景 |
英文场景 |
8K/16K |
否 |
无 |
|
Eric |
Eric |
英音男声 |
英文场景 |
英文场景 |
8K/16K |
否 |
无 |
|
Emily |
Emily |
英音女声 |
英文场景 |
英文场景 |
8K/16K |
否 |
无 |
|
Luna |
Luna |
英音女声 |
英文场景 |
英文场景 |
8K/16K |
否 |
无 |
|
Luca |
Luca |
英音男声 |
英文场景 |
英文场景 |
8K/16K |
否 |
无 |
|
Wendy |
Wendy |
英音女声 |
英文场景 |
英文场景 |
8K/16K/24K |
否 |
无 |
|
William |
William |
英音男声 |
英文场景 |
英文场景 |
8K/16K/24K |
否 |
无 |
|
Olivia |
Olivia |
英音女声 |
英文场景 |
英文场景 |
8K/16K/24K |
否 |
无 |
|
姗姗 |
Shanshan |
粤语女声 |
方言场景 |
标准粤文(简体)及粤英文混合场景 |
8K/16K/24K |
否 |
无 |
|
小玥 |
Xiaoyue |
四川话女声 |
方言场景 |
中文及中英文混合场景 |
8K/16K |
否 |
公测版 |
|
Lydia |
Lydia |
英中双语女声 |
英文场景 |
英文场景 |
8K/16K |
否 |
公测版 |
|
艾硕 |
Aishuo |
自然男声 |
客服场景 |
中文及中英文混合场景 |
8K/16K |
是 |
公测版 |
|
青青 |
Qingqing |
中国台湾话女声 |
方言场景 |
中文场景 |
8K/16K |
否 |
公测版 |
|
翠姐 |
Cuijie |
东北话女声 |
方言场景 |
中文场景 |
8K/16K |
否 |
公测版 |
|
小泽 |
Xiaoze |
湖南重口音男声 |
方言场景 |
中文场景 |
8K/16K |
是 |
公测版 |
服务状态码
服务的每一次响应都包含status字段,即服务状态码,各状态码含义如下。
通用错误:
|
错误码 |
原因 |
解决办法 |
|
40000001 |
身份认证失败 |
检查使用的令牌是否正确,是否过期。 |
|
40000002 |
无效的消息 |
检查发送的消息是否符合要求。 |
|
403 |
令牌过期或无效的参数 |
首先检查使用的令牌是否过期,然后检查参数值设置是否合理。 |
|
40000004 |
空闲超时 |
确认是否长时间(10秒)没有发送数据到服务端。 |
|
40000005 |
请求数量过多 |
检查是否超过了并发连接数或者每秒钟请求数。如果超过并发数,建议从免费版升级到商用版,或者商用版扩容并发资源。 |
|
40000000 |
默认的客户端错误码 |
根据错误消息解决问题,或提交工单。 |
|
50000000 |
默认的服务端错误 |
如果状态码偶尔返回,可以忽略;如果状态码多次返回,请提交工单。 |
|
50000001 |
内部调用错误 |
如果状态码偶尔返回,可以忽略;如果状态码多次返回,请提交工单。 |
网关错误:
|
错误码 |
原因 |
解决办法 |
|
40010001 |
不支持的接口 |
如果使用SDK,请提交工单。 |
|
40010002 |
不支持的指令 |
如果使用SDK,请提交工单。 |
|
40010003 |
无效的指令 |
如果使用SDK,请提交工单。 |
|
40010004 |
客户端提前断开连接 |
检查是否在请求正常完成之前关闭了连接。 |
|
40010005 |
任务状态错误 |
发送了当前任务状态不能处理的指令。 |
配置错误:
|
错误码 |
原因 |
解决办法 |
|
40020105 |
应用不存在 |
检查应用appkey是否正确,是否与令牌归属同一个账号。 |
TTS(Text to Speech)错误:
|
错误码 |
原因 |
解决办法 |
|
41020001 |
参数错误 |
检查是否传递了正确的参数。 |
|
51020001 |
TTS服务端错误 |
如果状态码偶尔返回,可以忽略;如果状态码多次返回,请提交工单。 |