语音合成
更新时间 2026-06-01 09:32:08
最近更新时间: 2026-06-01 09:32:08
介绍如何调用语音合成能力。
1、接口描述
语音合成(Text To Speech,TTS)将文本转成拟人化的语音。目前仅支持中文语音合成,提供三种音色的选择(包含一个男声,两个女声),支持自定义语调、语速等参数,支持SSML标记语言功能。
2、请求方法
POST
3、接口要求
目前仅支持 base64 编码方式请求
一次请求仅支持一条数据
4、URI
/v1/aiop/api/2z0yhhrzgv0g/tts/predict
5、请求参数
请求头header参数
| 参数 | 是否必填 | 参数类型 | 说明 | 示例 | 下级对象 |
|---|---|---|---|---|---|
| Content-Type | 是 | String | json 格式 | application/json | |
| Authorization | 是 | String | 平台应用APIkey | Bearer $API_KEY |
请求体body参数
| 参数 | 是否必填 | 参数类型 | 说明 | 示例 | 下级对象 |
|---|---|---|---|---|---|
| Action | 是 | String | 算法名称,固定值"TTS" | TTS | |
| TextData | 是 | String | 支持中文语音合成。合成语音的文本,按 UTF-8 编码,最小支持 3 个字符,最多支持 300 个字符(声音类型为2、3、4)。 汉字、英文、数字、标点均等同于一个字符。 强烈建议输入文本加上标点符号,便于合成更正确的语音数据。 支持SSML标记语言输出 | 今晚去吃火锅吗 | |
| VoiceType | 是 | Int | 声音类型,取值2、3、4。2为甜美女声,3为温柔女声,4为磁性男声 | 2 | |
| Pitch | 否 | Float | 语调。返回范围 [0.8, 2],默认值为 1.0 | 1.0 | |
| Speed | 否 | Float | 语速。返回范围 [0.5, 2],默认值为 1.0 | ||
| Volume | 否 | int | 音量。返回范围[-5, 5],默认值为 0,表示正常音量。值越大表示音量越大,值越小表示音量越小。取值为 -5 时为音量最小值,并非为无声。 |
TextData支持SSML语言输入:
| 标签 | 功能描述 | 语法示例 |
|---|---|---|
| <speak> | 所有待使用SSML标签的根节点,一切需要调用SSML标签的文本都要包含在<speak></speak>中 | <speak>需要调用SSML标签的文本</speak> |
| <break> | 在指定位置插入停顿,插入处至少一侧需为中文文本 | <speak>那我<break/>打这个视频电话的意义在哪里?</speak> |
| <word> | 指定文本连续读,中间没有任何停顿。仅支持中文 | <speak>那<word>我打这个</word>视频电话的意义在哪里?</speak> |
| <phoneme> | 用拼音指定字的读音,其中用数字(1-5)分别代表一至四声调和轻声,写在拼音末尾。连续指定多个字时,拼音用空格隔开。仅支持中文 | <speak><phoneme alphabet="py" ph="dian3 dang4 hang2">典当行</phoneme>典当<phoneme alphabet="py" ph=“xing2”>行</phoneme></speak> |
| <say-as> | 指定数字是一个个读还是整体读 | 一个个读:<speak><say-as interpret-as="digits">12345</say-as></speak> 整体读:<speak><say-as interpret-as="cardinal">12345</say-as></speak> |
| <say-as> | 指定英文按照一个个字母读 | 按照字母读: <speak><say-as interpret-as="characters">app</say-as></speak> |
| <prosody> | 指定速度,仅支持纯中文。其中速度值需为50%-200%间的百分数 | <speak><prosody rate="190%">如同爱人的鼻息吹着我</prosody></speak> |
| <sub> | 使用指定的别名代替原文本进行语音合成 | 文本语音合成代替TTS进行语音合成: <speak><sub alias="语音合成">TTS</sub></speak> |
使用SSML标记语言的文本中不要再使用‘<>’,否则会出现格式解析错误。
6、请求代码示例
Curl -X POST
"https://${host}/${api}/v1/aiop/api/2z0yhhrzgv0g/tts/predict"
-H "Content-Type: application/json"
-H "Authorization: Bearer $API_KEY"
--data '{"Action": "TTS", "TextData": "今晚去吃火锅吗", "VoiceType":2}'7、返回值说明
请求成功返回响应参数
| 参数 | 是否必填 | 参数类型 | 说明 | 示例 | 下级对象 |
|---|---|---|---|---|---|
| statusCode | 是 | Int | 返回状态,返回 0 表示成功,返回错误代码参考下面的错误代码列表 | 0 | |
| message | 是 | String | 如果statusCode 为 0,返回 success;如果 statusCode非 0,则返回对应的可读错误信息 | success | |
| returnObj | 是 | Object | 返回结果对象 | returnObj |
表returnObj
| 参数 | 是否必填 | 参数类型 | 说明 | 示例 | 下级对象 |
|---|---|---|---|---|---|
| Audio | 是 | String | 语音编码数据。Base64 编码的 wav 格式音频数据 | "_9j_4AAQSkZJRgA......Zuv_9k=" |
请求失败返回响应参数
| 参数 | 是否必填 | 参数类型 | 说明 | 示例 | 下级对象 |
|---|---|---|---|---|---|
| statusCode | 是 | Int | 错误码,放置API对应的错误码 | 500001 | |
| message | 是 | String | 返回对应的错误信息 | 服务接口异常,请联系管理员 | |
| details | 是 | String | 返回对应的错误描述 | 需要联系管理员处理 | |
| error | 是 | String | 返回对应的错误码 | AI_OP_500001 |
8、返回值示例
请求成功返回值示例
{
"statusCode": 0,
"message": "success",
"returnObj": {
"Audio": "_9j_4AAQSkZJRgA......Zuv_9k="
}
}请求失败返回值示例
{
"statusCode": 400003,
"message": "Body 内容为空",
"details": "Body 请求数据为空,没有包含内容",
"error":"AI_OP_400003"
}9、状态码
| http状态码 | 描述 |
|---|---|
| 200 | 表示请求成功 |
10、错误码说明
6 位错误码。4 开头为业务错误码,5 开头为服务错误码。
| 错误码 | 错误信息 | 错误描述 |
|---|---|---|
| AI_OP_400003 | 请求体内容为空 | 请求体请求数据为空,没有包含内容 |
| AI_OP_400004 | 请求体非 json 格式 | 请求体内容需要符合 json 要求 |
| AI_OP_400005 | 请求体类型错误 | 请求体需为字典,不能为其他类型 |
| AI_OP_400006 | 必传的参数未传 | 必须的参数(Action、TextData)未传 |
| AI_OP_400008 | 请求体的参数字段类型错误 | 请求体的参数字段类型错误 |
| AI_OP_400009 | 请求体的参数字段值为空 | 请求体的参数字段值为空 |
| AI_OP_400010 | 请求体的参数字段值设置错误 | 请求体的参数字段值设置错误 |
| AI_OP_420001 | 文本长度超过限制 | 文本输入过长,请参考接口文档说明 |
| AI_OP_420002 | 文本长度低于阈值 | 文本输入过短,请参考接口文档说明 |
| AI_OP_500001 | 服务接口异常,请联系管理员 | 需要联系管理员处理 |
base64 解码规则:使用常规的 safe base64 编码方式
python 中推荐使用
base64.urlsafe_b64decode()函数进行编码java 中推荐使用
BASE64.getUrlDecoder().encodeToString()函数进行编码语音合成服务调用收到的base64编码转为wav格式音频python示例:
import json
import base64
if __name__ == "__main__":
filename = "result.json" # 调用后的 json 结果
with open(filename, 'r') as file:
data = json.load(file)
audio_base64 = data["result"]["Audio"] # 获取返回结果中的 base64
audio_wav = base64.urlsafe_b64decode(audio_base64) # 解码
with open("output.wav", "wb") as f: # 保存音频为 wav 格式
f.write(audio_wav)