声音复刻
1. 概述
声音复刻 又称 声音克隆,即发音者通过录制一些固定文本对应的音频,通过训练得到一个与 发音者声音相似的 tts 音色资源。可以通过 AICloudTTSEngine (云端合成引擎)来合成并播放发音者专属的声音。
2. 初始化
//初始化声音复刻引擎
AICloudVoiceCopyEngine.getInstance().init(new AICloudVoiceCopyConfig
.Builder()
.setProductId(PRODUCT_ID) //产品ID
.setApiKey(API_KEY) //产品apiKey
//思必驰 dca sdk 返回的token、rememberToken
.setToken("token-63b31b35-28cf-428a-a85d-6e0fcd708471.beta")
.setRememberToken("1136d7bd-d741-40e9-9e14-d16fa0281684.beta")
.create(), voiceCopyListener);
3. 接口说明
3.1. 声音复刻接口
/**
* 初始化声音复刻引擎
*
* @param config 声音复刻配置信息
* @param listener 声音复刻监听接口
*/
public synchronized void init(AICloudVoiceCopyConfig config
, AICloudVoiceCopyListener listener);
/**
* 获取复刻对应的录音文本
*/
public void getText();
/**
* 上传音频(音频检测)
*
* @param textId 文本ID,即录音对应的文本编号,必填。
* @param gender MALE / FEMALE , 必填
* @param age 年龄段 (成人|儿童) ADULT / CHILD, 非必填
* @param filePath 音频文件路径
*/
public void upload(String textId, String gender, String age, String filePath);
/**
* 提交训练
*
* @param gender 自定义声音录音性别(MALE 和 FEMALE),必填
* @param age 年龄段 (成人|儿童) ADULT / CHILD
* @param customInfo 自定义音色资源名称
* @param audio_list 音频检测接口所返回的 "audio_reserve_id" 集合
* @param pre_tts_text 训练后,试听音频文本
*/
public void training(String gender, String age, String customInfo
, ArrayList<String> audio_list, ArrayList<String> pre_tts_text);
/**
* 查询任务状态,查询全部
*
* @param taskId 复刻任务ID
*/
public void query(String taskId);
/**
* 删除音色
*
* @param taskId 任务ID
*/
public void delete(String taskId);
/**
* 自定义任务相关的信息
*
* @param taskId 任务ID
* @param customInfo 自定义信息
*/
public void customize(String taskId, String customInfo);
/**
* 停止声音复刻
*/
public void stop();
/**
* 释放复刻资源
*/
public void destroy();
3.2 复刻监听接口(voiceCopyListener)
/**
* 初始化结果回调
*
* @param status 0 表示成功,1 表示失败
* @param msg 详细描述
*/
void onInit(int status, String msg);
/**
* 录音文本回调
*
* @param state 0 表示成功,-1 表示失败
* @param data 服务端响应的数据
* @param e 异常信息
*/
void onRecordText(int state, String data, IOException e);
/**
* 音频检测回调
*
* @param state 0 表示成功,-1 表示失败
* @param data 服务端响应的数据
* @param e 异常信息
*/
void onUpload(int state, String data, IOException e);
/**
* 提交训练回调
*
* @param state 0 表示成功,-1 表示失败
* @param data 服务端响应的数据
* @param e 异常信息
*/
void onTraining(int state, String data, IOException e);
/**
* 查询任务状态,查询全部回调
*
* @param state 0 表示成功,-1 表示失败
* @param data 服务端响应的数据
* @param e 异常信息
*/
void onQuery(int state, String data, IOException e);
/**
* 删除音色资源回调
*
* @param state 0 表示成功,-1 表示失败
* @param data 服务端响应的数据
* @param e 异常信息
*/
void onDelete(int state, String data, IOException e);
/**
* 更新任务相关的自定义信息回调
*
* @param state 0 表示成功,-1 表示失败
* @param data 服务端响应的数据
* @param e 异常信息
*/
void onCustomize(int state, String data, IOException e);
4. 响应数据
4.1 音频检测
字段 |
描述 |
备注 |
match_percent |
匹配度,所有字都读对,100分 |
|
highlight_text |
读错的字会高亮显示,就是包含的部分 |
|
audio_reserve_id |
音频文件的唯一标识, 后面提交训练会用到 |
|
is_valid |
标记是否通过 |
{
"code": 0
"result": [
{
"is_valid": false,
"match_percent": 57,
"audio_reserve_id": "503a858f73b245dc835c42378426f137",
"highlight_text": "有一次,林肯总统正<mark>在演</mark>讲,突<mark>然一</mark>个青年递给他一张纸条<mark>。林肯打开一看,上面只有两个字:“傻瓜</mark>”。"
}
],
"requestInfo": "914009336",
"recordId": "5f2a5ea11485690c06508ddbb644b887"
}
4.2 提交训练
{
"code": 0
"result": {
"taskId": "b646f8d0-f70c-4438-8ad2-496ecb47a585"
}
"requestInfo": "914009336",
"recordId": "5f2a5ea11485690c06508ddbb644b887"
}
4.3 查询任务状态
字段 |
描述 |
备注 |
taskId |
复刻任务ID |
|
eventName |
训练状态 "waiting_train", "begin_train" , "complete_train", "fail_train" |
|
voiceId |
音色id |
|
userId |
用户id |
|
customInfo |
用户名称 |
|
preTtsList |
试听音频列表 |
{
"code": 0,
"result": {
"pid": "914009336",
"userId": "userId-777777",
"taskList": [
{
"taskId": "b646f8d0-f70c-4438-8ad2-496ecb47a585",
"eventName": "complete_train",
"voiceId": "1f596872812c465fbcebde99ea83c139",
"customInfo": "app自定义信息",
"preTtsList": []
}
]
},
"requestInfo": "userId-777777",
"recordId": "5f2a79745077e6232ae6ea671b232a9b"
}
4. 注意事项
- 录音固定文本默认是思必驰演示专用,若客户要定制需要提供文本给思必驰确认并配置。
- 训练成功得到的 voiceId 通过 AICloudTTSEngine(云端合成引擎)来合成并播放。
- 复刻SDK只提供单项能力,跨设备之间 voiceId 的同步需求则需要上层业务端来保证。