声音复刻接口
前提条件
- 确保已按照配置Java环境配置完毕。
- 请参考SDK(websocket)获取最新版本SDK包。
- 使用预置音色或注册的声音合成语音。
- 仅上海一局点支持该接口。
初始化Client
初始化vcsClient详见表1。
请求参数
请求类型为vcsRequest,详见表2。
参数名称 | 是否必选 | 参数类型 | 描述 |
|---|---|---|---|
path | 是 | String | 待注册的录音数据,使用base64编码,大小不超过6MB。支持wav、mp3、m4a格式,采样率不小于16kHz,时长在5-25秒,支持单、双通道。 |
audioPath | 是 | String | 待合成音频存储路径。 |
text | 是 | String | 待合成文本,文本的长度不大于300字符。 |
config | 是 | Object | 详见表3。 |
参数名称 | 是否必选 | 参数类型 | 描述 |
|---|---|---|---|
audioFormat | 否 | String | 合成音频的格式。支持wav、mp3、pcm,默认wav |
sampleRate | 否 | String | 合成音频的采样率。支持8kHz、16kHz、24kHz,默认16kHz |
voiceName | 是 | String | 合成所使用的音色名称,可选择用户注册的音色或预置音色。预置音色取值范围参考表4 |
speed | 否 | Integer | 语速。 取值范围:-500~500 默认值:0 |
pitch | 否 | Integer | 音高。 取值范围: -500~500 默认值:0 |
volume | 否 | Integer | 音量。 取值范围:0~100 默认值:50 |
参数名称 | voice_name | 类型 | 使用场景 | 支持采样率(Hz) |
|---|---|---|---|---|
华小莉 | chinese_huaxiaoli_common | 标准女声 | 中英混合 | 8k/16k/24k |
华小智 | chinese_huaxiaozhi_common | 男童声 | 中英混合 | 8k/16k/24k |
华小天 | chinese_huaxiaotian_common | 朝气男声 | 中英混合 | 8k/16k/24k |
华小媛 | chinese_huaxiaoyuan_common | 成熟女声 | 中英混合 | 8k/16k/24k |
华小静 | chinese_huaxiaojing_common | 女童声 | 中英混合 | 8k/16k/24k |
华小博 | chinese_huaxiaobo_common | 标准男声 | 中英混合 | 8k/16k/24k |
华小柔 | chinese_huaxiaorou_common | 标准女声 | 中英混合 | 8k/16k/24k |
华小悠 | chinese_huaxiaoyou_common | 嘹亮女声 | 中英混合 | 8k/16k/24k |
华小晴 | chinese_huaxiaoqing_common | 青春女声 | 中英混合 | 8k/16k/24k |
华小溪 | chinese_huaxiaoxi_common | 温柔女声 | 中英混合 | 8k/16k/24k |
华小彤 | chinese_huaxiaotong_common | 俏皮女声 | 中英混合 | 8k/16k/24k |
华小雅 | chinese_huaxiaoya_common | 标准女声 | 中英混合 | 8k/16k/24k |
华小伟 | chinese_huaxiaowei_common | 成熟男声 | 中英混合 | 8k/16k/24k |
华小帅 | chinese_huaxiaoshuai_common | 标准男声 | 中英混合 | 8k/16k/24k |
华小杰 | chinese_huaxiaojie_common | 温柔男声 | 中英混合 | 8k/16k/24k |
响应参数
请求示例
- 说明:“endpoint”即调用API的请求地址,不同服务不同区域的“endpoint”不同,具体请参见终端节点,当前仅支持上海一。
- 调用合成API,将文本合成为语音。
package com.huawei.sis.demo.cn_demo;
import com.huawei.sis.bean.AuthInfo;
import com.huawei.sis.bean.SisConfig;
import com.huawei.sis.bean.SisConstant;
import com.huawei.sis.bean.request.VcsCloneRequest;
import com.huawei.sis.bean.response.VoiceCloneResponse;
import com.huawei.sis.client.VcsClient;
import com.huawei.sis.exception.SisException;
import com.huawei.sis.util.JsonUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 声音复刻Demo
* <p>
* Copyright 2021 Huawei Technologies Co.,Ltd.
*/
public class VcsDemo {
private static final Logger log = LoggerFactory.getLogger(VcsDemo.class);
// 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;
private String ak = System.getenv("HUAWEICLOUD_SDK_AK");
private String sk = System.getenv("HUAWEICLOUD_SDK_SK");
private String region = ""; // 区域,如cn-east-3
private String projectId = ""; // 项目id,在我的凭证查看。参考https://support.huaweicloud.com/api-sis/sis_03_0008.html
private String serviceEndPoint = ""; // 可选参数,传入new AuthInfo(ak, sk, region, projectId);
private String voiceName = ""; // 音色名称,可以使用注册音色或预置音色
private String text = ""; // 待合成文本
private String audioPath = ""; // 待合成结果保存路径,例如"D://SIS/audio.wav"
// 使用该脚本前,保证要使用的声音已经注册,voiceName为声音名称。若没有注册声音,请使用VcsRegisterAndRequest.java脚本,注册声音和查询声音
public static void main(String[] args) {
VcsDemo demo = new VcsDemo();
demo.vcsDemo();
}
/**
* 定义config,所有参数可选,设置超时时间等。
*
* @return SisConfig
*/
private SisConfig getConfig() {
SisConfig config = new SisConfig();
// 设置连接超时,默认10000ms
config.setConnectionTimeout(SisConstant.DEFAULT_CONNECTION_TIMEOUT);
// 设置读取超时,默认10000ms
config.setReadTimeout(SisConstant.DEFAULT_READ_TIMEOUT);
// 设置代理, 一定要确保代理可用才启动此设置。 代理初始化也可用不加密的代理,new ProxyHostInfo(host, port);
// 设置代理,可参考 config.setProxy(new ProxyHostInfo(host, port, user, password));
return config;
}
private void setParameters(VcsCloneRequest request) {
// 1. 设置音频格式,默认wav
request.getVoiceCloneConfig().setAudioFormat("wav");
// 2. 设置采样率,24000、16000、8000,默认16000
request.getVoiceCloneConfig().setSampleRate("16000");
// 3. 设置音色,如 chinese_huaxiaoli_common、chinese_huaxiaotian_common
request.getVoiceCloneConfig().setVoiceName(voiceName);
// 4. 设置语速,取值范围为 -500~500,默认值为0
request.getVoiceCloneConfig().setSpeed(0);
// 5. 设置音调,取值范围为 -500~500,默认值为0
request.getVoiceCloneConfig().setPitch(0);
// 6. 设置音量,取值范围为 0~100,默认值为50
request.getVoiceCloneConfig().setVolume(50);
}
/**
* 声音复刻demo。
*/
private void vcsDemo() {
synthesisVoice();
}
private void synthesisVoice() {
try {
// 1. 初始化VcsClient
// 定义authInfo,根据ak,sk,region,projectId
AuthInfo authInfo = new AuthInfo(ak, sk, region, projectId);
// 设置config,主要与超时有关
SisConfig config = getConfig();
// 根据authInfo和config,构造VcsClient
VcsClient vcsClient = new VcsClient(authInfo, config);
// 2. 配置请求
VcsCloneRequest request = new VcsCloneRequest(voiceName, text);
setParameters(request);
request.setSaved(true); // 是否对合成结果进行保存
request.setSavePath(audioPath); // 保存路径
// 3. 发送请求,获取响应。具体结果可通过response.getXX获取。
VoiceCloneResponse response = vcsClient.synthesisVoice(request);
log.info(JsonUtils.obj2Str(response, true));
} catch (SisException e) {
log.info("error_code:" + e.getErrorCode() + " error_msg:" + e.getErrorMsg());
}
}
} 响应示例
状态码:200
成功响应示例
{
"trace_id": "567e8537-a89c-13c3-a882-826321939651",
"result":{
"data":
"/+MgxAAUeHpMAUkQAANhuRACAIAgKHKQmRisVo0aNAgQIIQyCgGBiwfB8H4IAgCAJg+D4Ph+IAQBBywfB8HwQDGAwfB8Hwf..."
}
} 状态码:400
失败响应示例
{
"error_code": "SIS.1207",
"error_msg": "'sample_rate' is invalid"
} 
