声音克隆

平台提供良好的能力,使用您的语料进行声音克隆,得到试听音频与 Voice ID(供后续正式语音合成使用)。

使用流程

  1. 上传克隆音频:按照 上传参考音频说明 上传克隆音频文件并获取file_id
  • 上传的音频文件格式需为单声道 wav 格式
  • 上传的音频文件的时长最少应不低于 5 秒,最长应不超过 2 分钟
  1. 上传风格音频 (可选):若需要提供风格音频以增强克隆效果,按照 上传参考音频说明 上传风格音频文件并获得对应的 file_id。填写在 clone_prompt 中的 prompt_audio 中。
  • 上传的音频文件格式需为单声道 wav 格式
  • 上传的音频文件的时长最少应不低于 5 秒,最长应不超过 2 分钟
  1. 调用声音克隆接口:基于获取的 file_id 和自定义的 voice_id 作为输入参数,调用 声音克隆接口 克隆音色。

  2. 使用克隆音色:使用复刻生成的 voice_id,根据实际需求调用 创建异步语音合成任务 等语音生成接口。

过程示例

1. 上传克隆音频

Python
"""
本示例用于获取克隆音频的 file_id。
注意:需要先将密钥信息写入环境变量 `API_KEY`。
"""
import requests
import os

api_key = os.getenv("API_KEY")
url = "https://maas-api.hivoice.cn/v1/files/upload"

payload = {"purpose": "voice_clone"}
files = [
  ("file", ("clone_input.wav", open("/path/to/clone_input.wav", "rb")))
]
headers = {
  "Authorization": f"Bearer {api_key}"
}

response = requests.post(url, headers=headers, data=payload, files=files)
response.raise_for_status()
file_id = response.json().get("file", {}).get("file_id")
print(file_id)

2. 上传风格音频

Python
"""
本示例用于获取示例风格音频的 file_id。
注意:需要先将密钥信息写入环境变量 `API_KEY`。
"""
import requests
import os

api_key = os.getenv("API_KEY")
url = "https://maas-api.hivoice.cn/v1/files/upload"

payload = {"purpose": "prompt_audio"}
files = [
  ("file", ("clone_prompt.wav", open("/path/to/clone_prompt.wav", "rb")))
]
headers = {
  "Authorization": f"Bearer {api_key}"
}

response = requests.post(url, headers=headers, data=payload, files=files)
response.raise_for_status()
prompt_file_id = response.json().get("file", {}).get("file_id")
print(prompt_file_id)

3. 进行声音克隆

Python
"""
本示例用于音色克隆。
注意:需要设置环境变量 `API_KEY`,
并将 "<voice_id>", <file_id_of_cloned_voice>, <file_id_of_prompt_audio> 替换为实际值。
"""
import requests
import json
import os

api_key = os.getenv("API_KEY")
url = "https://maas-api.hivoice.cn/v1/audio/voices/clone"

clone_payload = {
  "file_id": file_id,
  "voice_id": "<your_custom_voice_id>",
  "clone_prompt": {
    "prompt_audio": prompt_file_id,
    "prompt_text": "我国的传统风俗过年每年都要贴春联"
  },
  "text": "前方高能,请保护好你的双眼,防止被惊吓",
  "model":"u2-tts-clone"
}
clone_headers = {
  "Authorization": f"Bearer {api_key}",
  "Content-Type": "application/json"
}

response = requests.post(url, headers=clone_headers, json=clone_payload)
response.raise_for_status()
print(response.text)