声音复刻接口
前提条件
- 确保已按照配置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 |
响应参数
Java SDK响应结果为Json格式,正确响应详见表5,错误响应详见表7。
|
参数名称 |
参数类型 |
描述 |
|---|---|---|
|
traceId |
String |
服务内部的令牌,可用于在日志中追溯具体流程。 |
|
result |
Object |
调用成功时为合成语音内容,调用失败时无此字段,详见表6。 |
请求示例
- 说明:“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"
}