# 一、接口说明

接入声音克隆合成API前,请先授权,否则禁止使用。

# 二、接口Demo

Java示例demo (opens new window)
python3示例demo (opens new window)

# 三、接口要求

内容 说明
请求协议 ws[s](为提高安全性,强烈推荐wss)
请求地址 ws[s]: //ws-ctts.hivoice.cn/v1/tts
接口鉴权 签名机制,详情请参照下方接口鉴权
字符编码 UTF-8
响应格式 统一采用JSON格式
开发语言 任意,只要可以向服务发起Websocket请求的均可
操作系统 任意
音频属性 采样率24KHz或16KHz或8KHz、位长16bit、单声道
音频格式 pcm,mp3
文本长度 单次调用长度需小于500个字符

# 四、接口鉴权

在握手阶段,请求方需要对请求进行签名,服务端通过签名来校验请求的合法性。 请求示例

/v1/tts?time=1585047674022&appkey=xxxxxxxxxxx&sign=xxxxxxxxxx

# 1. 鉴权参数

参数 描述 示例 备注
appkey 用户的appkey *** 必需
time 访问时间戳,Unix时间戳(毫秒数) 1585047674022 必需
sign 签名 *** 必需

A)将上述参数按照appkey、time、secret顺序拼接字符串;

B)将A形成字符串获取SHA256摘要,形成一个64位的十六进制(字母大写)字符串,即为本次请求sign(签名)的值

# 2. 鉴权示例代码

/**
* 热词签名获取方法
* @param appkey
* @param timestamp
* @param secret
* @return
*/
public String getSign(String appkey, String timestamp, String secret) {
    String originalStr = appkey + timestamp + secret;
    StringBuilder sign = new StringBuilder();
    try {
        MessageDigest md = MessageDigest.getInstance("SHA-256");
        byte[] bytes = md.digest(originalStr.getBytes(StandardCharsets.UTF_8));
        for (int i = 0; i < bytes.length; i++) {
            String hex = Integer.toHexString(bytes[i] & 0xFF);
            if (hex.length() == 1) {
                sign.append("0");
            }
            sign.append(hex.toUpperCase());
        }
    } catch (Exception unused) {
    }
    return sign.toString();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

# 五、开始合成

通过websocket文本传输,json格式数据

# 1. 参数说明

参数名 类型 必传 描述 可选值 默认
format string 音频格式 pcm,mp3 pcm
sample string 采样率(单位Hz) 8000,16000,24000 16000
vcn string 音色id(voiceId)
speed int 语速 0~100 50
volume int 音量 0~100 50
pitch int 音高 0~100 50
bright int 亮度 50~100 50
text string 需要合成的文本
user_id string 用户标识

# 2. 请求参数示例

{
	"vcn": "xxxxxxxxxx",
	"volume": 50,
	"user_id": "unisound-java-demo",
	"format": "pcm",
	"bright": 50,
	"pitch": 50,
	"smt": 0,
	"text": "云知声专注于物联网人工智能服务,拥有完全自主知识产权,是世界领先的智能语音识别AI技术企业之一。公司成立于2012年6月29日,总部位于北京,在上海、深圳、厦门、合肥均设有分公司。",
	"sample": "16000",
	"emt": 0,
	"speed": 50
}
1
2
3
4
5
6
7
8
9
10
11
12
13

# 六、接收语音

接收语音数据是通过websocket的onMessage(byte)方法, websocket返回的二进制数据即为合成的语音数据。

# 七、合成结束

当服务端合成结束或出错时会返回文本消息。

接收文本结果是通过onMessage(String)方法,文本结果描述如下:

参数 类型 描述 是否为空
code int 处理结果 NO
msg String 结果说明 NO
sid String 识别的唯一id NO
end boolean 请求是否结束 NO

返回结果示例

{
	"code": 0,
	"end": true,
	"msg": "success",
	"sid": "29d5e5f3f2be4fac97ab97be6f8efc04"
}
1
2
3
4
5
6

# 八、错误码

错误码 说明 解决办法
0 成功
20501 参数错误 客户端检查参数是否正确
20502 发音人不可用 到控制台查看可用发音人
20503 服务内部错误 建议重试,或者提工单,工单详情请提供sid
20504 并发超过限制 减小并发或者购买并发套餐
20505 套餐次数使用完 购买次数套餐
20506 appkey不存在 检查appkey是否合法
20507 客户端ip不在白名单中 检查是否开启白名单,同时检查客户端出口ip是否在ip白名单中