# 一、SDK说明

声音克隆是云知声的“音视文”AIGC(AI Generated Content)项目中“音”的重要组成部分。其本质是通过目标人少量的录音,训练得到音色和发音风格与录音非常相似的声音模型,快速“克隆”目标人的说话人模型,进而使用该目标说话人音色完成指定发音任务。
SDK详细的接口介绍及说明请参考:HarmonyOS文档

示例demo (opens new window)

SDK包 (opens new window)

# 二、SDK集成步骤

# 1.调用流程

avatar

# 三、Demo使用方法

将SDK中libs下面的har包拷贝到工程的libs目录下;
工程结构图如下: avatar

"dependencies":
  {
    "sdk": "file:libs/VoiceCloneLibrary.har"
  }
1
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白名单中