- ···
- 产品服务
- ···
- 解决方案
- ···
- 文档中心
- ···
# 一、SDK说明
声音克隆是云知声的“音视文”AIGC(AI Generated Content)项目中“音”的重要组成部分。其本质是通过目标人少量的录音,训练得到音色和发音风格与录音非常相似的声音模型,快速“克隆”目标人的说话人模型,进而使用该目标说话人音色完成指定发音任务。
SDK详细的接口介绍及说明请参考:HarmonyOS文档。
# 二、SDK集成步骤
# 1.调用流程

# 三、Demo使用方法
将SDK中libs下面的har包拷贝到工程的libs目录下;
工程结构图如下:

"dependencies":
{
"sdk": "file:libs/VoiceCloneLibrary.har"
}
1
2
3
4
2
3
4
该代码加入到oh-package.json5
动态获取权限,运行过程需要给予应用所需要的录音权限
# 四、接入流程
# ①、创建应用
VoiceClone.initConfig(this.appKey, this.appSecret, this.cloneAddress)
SpeechSynthesizer.initConfig(this.appKey, this.appSecret, this.syntheseAddress)
配置参数:appKey(必填)、appSecret(必填)、cloneAddress(选填)、syntheseAddress(选填)
# ②、创建克隆任务
# 创建克隆任务
VoiceClone.createCloneTask(
this.userId,
this.taskName,
this.gender,
this.age,
(data: CloneTask) => {
if (data.id != null && data.id.length > 0) {
promptAction.showToast({ message: "任务创建成功" })
this.pageStack.replacePathByName("CloneVoiceTask", data)
} else {
promptAction.showToast({
message: "任务创建失败",
duration: 2000
})
}
},
(code: number, msg: string) => {
promptAction.showToast({
message: `任务创建失败,code=${code},msg=${msg}`,
duration: 2000
})
}
)
# 获取默认文本
VoiceClone.getDefaultText(
(data) => {
let list: DefaultTextBean[] = []
data.forEach((item) => {
list.push(new DefaultTextBean(item))
})
this.defaultTextList = list
},
(code, msg) => {
promptAction.showToast({
message: "请求失败,code=" + code + ", msg=" + msg
})
}
)
# 音频文件上传
VoiceClone.uploadAudio(
this.taskId,
textId,
filePath,
(data: UploadAudioResult) => {
let result: string
if (data.valid == 0) {
result = `成功(匹配度${data.matchPercent}%)`
} else {
result = `失败(匹配度${data.matchPercent}%)`
}
},
(code: number, msg: string) => {
promptAction.showToast({
message: "请求失败,code=" + code + ", msg=" + msg
})
})
# 提交训练任务
VoiceClone.commitTask(
this.taskId,
() => {
promptAction.showToast({
message: "提交成功,请等待训练完成"
})
this.pageStack.pop()
},
(code: number, msg: string) => {
promptAction.showToast({
message: "请求失败,code=" + code + ", msg=" + msg
})
})
# ③、获取声音列表
VoiceClone.requestVoiceList(
this.userId,
(data) => {
let list: VoiceBean[] = []
data.forEach((item) => {
list.push(item)
})
this.voiceList = list
},
(code, msg) => {
promptAction.showToast({
message: "请求失败,code=" + code + ", msg=" + msg
})
}
)
# ④、文本合成音频
//可选配置
SpeechSynthesizer.getInstance().setFormat(this.format)
SpeechSynthesizer.getInstance().setSample(this.sample)
SpeechSynthesizer.getInstance().setSpeed(this.speed)
SpeechSynthesizer.getInstance().setSpeed(this.speed)
SpeechSynthesizer.getInstance().setVolume(this.volume)
SpeechSynthesizer.getInstance().setPitch(this.pitch)
SpeechSynthesizer.getInstance().setBright(this.bright)
SpeechSynthesizer.getInstance().setUserId(this.userId)
//必填配置
SpeechSynthesizer.getInstance().setVcn(this.voiceId)
SpeechSynthesizer.getInstance().playSpeech(this.text)
# 五、错误码
| 错误码 | 说明 | 解决办法 |
|---|---|---|
| 0 | 成功 | |
| 20401 | appkey不存在 | 检查appkey是否配置正确 |
| 20402 | 请求参数错误 | 客户端检查参数是否正确 |
| 20403 | 文件为空 | 检查音频文件是否存在 |
| 20404 | 训练任务提交失败 | 检查任务编号是否正确 |
| 20405 | 可供训练的录音文件不足 | 音频文件不能少于20 |
| 20406 | 套餐已用完 | 购买时长套餐 |
| 20407 | 环境噪音检测不通过 | 找个安静地方录制音频 |
| 20408 | 训练中的任务不允许删除 | 训练完成后可删除 |
| 20499 | 服务器内部错误 | 建议重试,或者提工单,工单详情请提供任务编号 |
| 20501 | 参数错误 | 客户端检查参数是否正确 |
| 20502 | 发音人不可用 | 到控制台查看可用发音人 |
| 20503 | 服务内部错误 | 建议重试,或者提工单,工单详情请提供sid |
| 20504 | 并发超过限制 | 减小并发或者购买并发套餐 |
| 20505 | 套餐次数使用完 | 购买次数套餐 |
| 20506 | appkey不存在 | 检查appkey是否合法 |
| 20507 | 客户端ip不在白名单中 | 检查是否开启白名单,同时检查客户端出口ip是否在ip白名单中 |
← 克隆WebAPI文档 合成WebAPI文档 →