语音合成接口
更新时间:
语音合成
服务概述
- 通过云上曲率的人工智能技术,将文本内容实时转换为自然流畅的语音流,适用于边合成边播放等低时延场景。
服务申请
语音合成 API 采用全流程自助申请模式。在云上曲率官网(https://www.ilivedata.com/)注册并激活账号后,在控制台创建语音合成项目,即可获得 appId 和服务密钥。
如需开通更多服务,可在管理控制台-总览页面开通其他服务。
接入方式
参数规范
请求URL: https://tts.ilivedata.com/api/v1/speech/synthesis/stream
HTTP请求头
请求头
值
描述
Content-Type
application/json;charset=UTF-8
请求体类型
Accept
application/octet-stream
接受的返回类型。建议明确指定为音频二进制流
X-AppId
例:81900001
项目或应用的唯一标识符。可通过 Header 传入;若未传入,则需在请求体中传入 appId
X-TimeStamp
例:2024-07-01T07:59:59Z
请求的 UTC 时间戳。需要把时间戳按 W3C 标准格式化,例如:2024-07-01T07:59:59Z. (http://www.w3.org/TR/xmlschema-2/#dateTime)。
Authorization
例:Njl86M/jY6zZaZoGhZdGO+GI/8+yGFECusGH1yQHUFE=
签名值
请求方法:POST
请求体:
参数
是否必需
类型
描述
text
必须
String
文本内容,去除首尾空白后不能为空。默认长度范围[1,2000]
language
可选
String
文本内容所属语种,推荐传入此语言参数,不传则使用自动语种检测结果。支持语种请参考语种列表
voice
必须
VoiceSetting
合成声音相关配置,参数为空时使用语种对应的系统默认声音
output
必须
OutputSetting
输出音频相关配置
VoiceSetting:
参数
必需
类型
描述
name
必选
String
联系客服获取相关音色
OutputSetting:
参数
必需
类型
描述
format
必选
String
选择输出合成音频格式,候选为 pcm、wav、mp3、opus,默认为 wav
请求体示例
Request Sample
{
"text": "您好,欢迎来到云上曲率。",
"language": "zh-CN",
"voice": {
"name": "juvenile"
},
"output": {
"format": "mp3"
}
}
请求签名:
当用户请求语音合成 API 时,可以使用 appId 和 secretKey 对请求做签名。当 API 收到带签名信息的请求之后,将使用相同的算法验证签名,如果发现签名不一致,API 将会返回 401 给用户。
如果 API 验证签名一致,且 appId 对应的用户有权限操作请求的资源,则请求成功,否则 API 返回 401。
通过 HTTP 请求 Header 发送签名
方法:在请求中加入名为 Authorization 的 Header,值为签名值。如下:
Authorization: Njl86M/jY6zZaZoGhZdGO+GI/8+yGFECusGH1yQHUFE=
签名计算方法
1.构造规范化的请求字符串(Canonicalized Query String)
将请求体 JSON 字符串以 UTF-8 字符编码做 sha256 编码后转换为 16 进制字符串(注意不是 Base64)
CanonicalizedQueryString = hex(sha256(jsonBody))
2.构造被签名字符串 StringToSign("\n" 代表 ASCII 里的换行符)
StringToSign = HTTPMethod + "\n" +
HostHeaderInLowercase + "\n" +
HTTPRequestURI + "\n" +
CanonicalizedQueryString <从上一步得到> + "\n" +
"X-AppId:" + SAME_APPID_IN_HEADER + "\n" +
"X-TimeStamp:" + SAME_TIMESTAMP_IN_HEADER
HTTPRequestURI 是请求 URI 的绝对路径,不包含请求串。如果 HTTPRequestURI 为空,也要保留一个正斜杠(/)
使用 HMAC-SHA256 协议创建基于哈希的消息身份验证代码(HMAC),然后计算签名。
3.StringToSign 作为签名字符串,secretKey 作为秘钥,SHA256 作为哈希算法
有关 HMAC 的更多信息,请参阅 https://tools.ietf.org/html/rfc2104。
4.将上一步的结果转换为 Base64 串
5.将 Base64 串放入 HTTP 请求 Header 的 Authorization
签名示例
下面是 appId 和 secretKey 的示例:
appId=81900001
secrectKey=****
下面是示例请求体:
{"text":"您好,欢迎来到云上曲率。","language":"zh-CN","voice":{"name":"juvenile"},"output":{"format":"mp3"}}
生成 CanonicalizedQueryString
4625d9e60b1fce4a6b4a01fb3ba8e7f33cd2751587ce79e4dc29e6d38b1fb1e9
生成 StringToSign
POST
tts.ilivedata.com
/api/v1/speech/synthesis/stream
4625d9e60b1fce4a6b4a01fb3ba8e7f33cd2751587ce79e4dc29e6d38b1fb1e9
X-AppId:81900001
X-TimeStamp:2024-11-01T07:59:59Z
HMAC 计算得到的签名
1nNkKezG9XgkbCau9aENhDDRJhoTMHAI85NnjY+Mm4k=
HTTP响应
流式接口成功时返回音频二进制流,而不是 JSON 结构。
成功响应头
响应头
类型
描述
Content-Type
String
application/octet-stream
Cache-Control
String
no-store
X-Task-Id
String
任务唯一标识
X-Audio-Format
String
输出音频格式
Transfer-Encoding
String
chunked
成功响应示例
Sample Response Headers
HTTP/1.1 200 OK
Content-Type: application/octet-stream
Cache-Control: no-store
X-Task-Id: bj_367a9314e0294cf1afcaee5c93b58129
X-Audio-Format: mp3
Transfer-Encoding: chunked
响应体为音频二进制流(如 mp3、wav、pcm、opus 分片数据),客户端需按二进制方式接收并播放或保存。
失败响应
请求参数错误、应用不存在、语种或输出格式不支持等场景下,接口会返回非 200 错误响应。失败时响应体为 JSON。
字段名
类型
描述
errorCode
Number
错误码
errorMessage
String
错误信息
失败响应示例
Sample Error Response
{
"errorCode": 3003,
"errorMessage": "Invalid voice name."
}
调用示例
curl -N -X POST 'https://tts.ilivedata.com/api/v1/speech/synthesis/stream' \
-H 'Content-Type: application/json' \
-H 'Accept: application/octet-stream' \
-H 'X-AppId: 81900001' \
-d '{"text":"您好,这是一个流式语音合成示例。","language":"zh-CN","output":{"format":"mp3"}}' \
--output stream_audio.mp3 -D headers.txt
语音合成
服务概述
- 通过云上曲率的人工智能技术,将文本内容实时转换为自然流畅的语音流,适用于边合成边播放等低时延场景。
服务申请
语音合成 API 采用全流程自助申请模式。在云上曲率官网(https://www.ilivedata.com/)注册并激活账号后,在控制台创建语音合成项目,即可获得 appId 和服务密钥。
如需开通更多服务,可在管理控制台-总览页面开通其他服务。
接入方式
参数规范
请求URL: https://tts.ilivedata.com/api/v1/speech/synthesis/stream
HTTP请求头
| 请求头 | 值 | 描述 |
|---|---|---|
| Content-Type | application/json;charset=UTF-8 | 请求体类型 |
| Accept | application/octet-stream | 接受的返回类型。建议明确指定为音频二进制流 |
| X-AppId | 例:81900001 | 项目或应用的唯一标识符。可通过 Header 传入;若未传入,则需在请求体中传入 appId |
| X-TimeStamp | 例:2024-07-01T07:59:59Z | 请求的 UTC 时间戳。需要把时间戳按 W3C 标准格式化,例如:2024-07-01T07:59:59Z. (http://www.w3.org/TR/xmlschema-2/#dateTime)。 |
| Authorization | 例:Njl86M/jY6zZaZoGhZdGO+GI/8+yGFECusGH1yQHUFE= | 签名值 |
请求方法:POST
请求体:
| 参数 | 是否必需 | 类型 | 描述 |
|---|---|---|---|
| text | 必须 | String | 文本内容,去除首尾空白后不能为空。默认长度范围[1,2000] |
| language | 可选 | String | 文本内容所属语种,推荐传入此语言参数,不传则使用自动语种检测结果。支持语种请参考语种列表 |
| voice | 必须 | VoiceSetting | 合成声音相关配置,参数为空时使用语种对应的系统默认声音 |
| output | 必须 | OutputSetting | 输出音频相关配置 |
VoiceSetting:
| 参数 | 必需 | 类型 | 描述 |
|---|---|---|---|
| name | 必选 | String | 联系客服获取相关音色 |
OutputSetting:
| 参数 | 必需 | 类型 | 描述 |
|---|---|---|---|
| format | 必选 | String | 选择输出合成音频格式,候选为 pcm、wav、mp3、opus,默认为 wav |
请求体示例
Request Sample
{
"text": "您好,欢迎来到云上曲率。",
"language": "zh-CN",
"voice": {
"name": "juvenile"
},
"output": {
"format": "mp3"
}
}
请求签名:
当用户请求语音合成 API 时,可以使用 appId 和 secretKey 对请求做签名。当 API 收到带签名信息的请求之后,将使用相同的算法验证签名,如果发现签名不一致,API 将会返回 401 给用户。
如果 API 验证签名一致,且 appId 对应的用户有权限操作请求的资源,则请求成功,否则 API 返回 401。
通过 HTTP 请求 Header 发送签名
方法:在请求中加入名为 Authorization 的 Header,值为签名值。如下:
Authorization: Njl86M/jY6zZaZoGhZdGO+GI/8+yGFECusGH1yQHUFE=
签名计算方法
1.构造规范化的请求字符串(Canonicalized Query String)
将请求体 JSON 字符串以 UTF-8 字符编码做 sha256 编码后转换为 16 进制字符串(注意不是 Base64)
CanonicalizedQueryString = hex(sha256(jsonBody))
2.构造被签名字符串 StringToSign("\n" 代表 ASCII 里的换行符)
StringToSign = HTTPMethod + "\n" +
HostHeaderInLowercase + "\n" +
HTTPRequestURI + "\n" +
CanonicalizedQueryString <从上一步得到> + "\n" +
"X-AppId:" + SAME_APPID_IN_HEADER + "\n" +
"X-TimeStamp:" + SAME_TIMESTAMP_IN_HEADER
HTTPRequestURI 是请求 URI 的绝对路径,不包含请求串。如果 HTTPRequestURI 为空,也要保留一个正斜杠(/)
使用 HMAC-SHA256 协议创建基于哈希的消息身份验证代码(HMAC),然后计算签名。
3.StringToSign 作为签名字符串,secretKey 作为秘钥,SHA256 作为哈希算法
有关 HMAC 的更多信息,请参阅 https://tools.ietf.org/html/rfc2104。
4.将上一步的结果转换为 Base64 串
5.将 Base64 串放入 HTTP 请求 Header 的 Authorization
签名示例
下面是 appId 和 secretKey 的示例:
appId=81900001
secrectKey=****
下面是示例请求体:
{"text":"您好,欢迎来到云上曲率。","language":"zh-CN","voice":{"name":"juvenile"},"output":{"format":"mp3"}}
生成 CanonicalizedQueryString
4625d9e60b1fce4a6b4a01fb3ba8e7f33cd2751587ce79e4dc29e6d38b1fb1e9
生成 StringToSign
POST
tts.ilivedata.com
/api/v1/speech/synthesis/stream
4625d9e60b1fce4a6b4a01fb3ba8e7f33cd2751587ce79e4dc29e6d38b1fb1e9
X-AppId:81900001
X-TimeStamp:2024-11-01T07:59:59Z
HMAC 计算得到的签名
1nNkKezG9XgkbCau9aENhDDRJhoTMHAI85NnjY+Mm4k=
HTTP响应
流式接口成功时返回音频二进制流,而不是 JSON 结构。
成功响应头
| 响应头 | 类型 | 描述 |
|---|---|---|
| Content-Type | String | application/octet-stream |
| Cache-Control | String | no-store |
| X-Task-Id | String | 任务唯一标识 |
| X-Audio-Format | String | 输出音频格式 |
| Transfer-Encoding | String | chunked |
成功响应示例
Sample Response Headers
HTTP/1.1 200 OK
Content-Type: application/octet-stream
Cache-Control: no-store
X-Task-Id: bj_367a9314e0294cf1afcaee5c93b58129
X-Audio-Format: mp3
Transfer-Encoding: chunked
响应体为音频二进制流(如 mp3、wav、pcm、opus 分片数据),客户端需按二进制方式接收并播放或保存。
失败响应
请求参数错误、应用不存在、语种或输出格式不支持等场景下,接口会返回非 200 错误响应。失败时响应体为 JSON。
| 字段名 | 类型 | 描述 |
|---|---|---|
| errorCode | Number | 错误码 |
| errorMessage | String | 错误信息 |
失败响应示例
Sample Error Response
{
"errorCode": 3003,
"errorMessage": "Invalid voice name."
}
调用示例
curl -N -X POST 'https://tts.ilivedata.com/api/v1/speech/synthesis/stream' \
-H 'Content-Type: application/json' \
-H 'Accept: application/octet-stream' \
-H 'X-AppId: 81900001' \
-d '{"text":"您好,这是一个流式语音合成示例。","language":"zh-CN","output":{"format":"mp3"}}' \
--output stream_audio.mp3 -D headers.txt