跳转到主要内容

使用流程

快速复刻功能实现具体操作流程如下:
  1. 上传待克隆音频 调用 上传复刻音频 上传待克隆的音频文件并获取 file_id
  • 支持上传的文件需遵从以下规范: 上传的音频文件格式需为:mp3、m4a、wav 格式; 上传的音频文件的时长最少应不低于 10 秒,最长应不超过 5 分钟; 上传的音频文件大小需不超过 20mb。
  1. 上传示例音频 (可选) 若需要提供示例音频以增强克隆效果,需要调用 上传示例音频上传示例音频文件并获得对应的 file_id。填写在clone_prompt中的prompt_audio中。
  • 支持上传的文件需遵从以下规范: 上传的音频文件格式需为:mp3、m4a、wav 格式; 上传的音频文件的时长小于 8s; 上传的音频文件大小需不超过 20mb。
  1. 调用复刻接口 基于获取的 file_id 和自定义的 voice_id 作为输入参数,调用 快速复刻接口 克隆音色。
  2. 使用克隆音色 使用复刻生成的 voice_id,根据实际需求调用语音生成接口,例如:

过程示例

1. 上传复刻音频

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

api_key = os.getenv("MINIMAX_API_KEY")
url = "https://api.minimaxi.com/v1/files/upload"

payload = {"purpose": "voice_clone"}
files = [
("file", ("clone_input.mp3", open("/Users/minimax/Downloads/clone_input.mp3", "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. 上传参考音频

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

api_key = os.getenv("MINIMAX_API_KEY")
url = "https://api.minimaxi.com/v1/files/upload"

payload = {"purpose": "prompt_audio"}
files = [
("file", ("clone_prompt.mp3", open("/Users/minimax/Downloads/clone_prompt.mp3", "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. 进行音色克隆

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

api_key = os.getenv("MINIMAX_API_KEY")
url = "https://api.minimaxi.com/v1/voice_clone"

payload = {
"file_id": <file_id_of_cloned_voice>,
"voice_id": "<your_custom_voice_id>",
"clone_prompt": {
"prompt_audio": <file_id_of_prompt_audio>,
"prompt_text": "后来认为啊,是有人抓这鸡,可是抓鸡的地方呢没人听过鸡叫。"
},
"text": "大兄弟,听您口音不是本地人吧,头回来天津卫,啊,待会您可甭跟着导航走,那玩意儿净给您往大马路上绕。",
"model": "speech-2.5-hd-preview"
}

headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}

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

完整示例

"""
本示例用于快速克隆音色并获取试听文件。
注意:需要先将密钥信息写入环境变量 `MINIMAX_API_KEY`,
并将"<your_custom_voice_id>"替换为您定义的音色 id。
"""
import json
import requests
import os

api_key = os.getenv("MINIMAX_API_KEY")
upload_url = "https://api.minimaxi.com/v1/files/upload"
clone_url = "https://api.minimaxi.com/v1/voice_clone"
headers = {"Authorization": f"Bearer {api_key}"}

# 1. 上传复刻音频

with open("/path/to/clone_input.mp3", "rb") as f:
files = {"file": ("clone_input.mp3", f)}
data = {"purpose": "voice_clone"}
response = requests.post(upload_url, headers=headers, data=data, files=files)
file_id = response.json()["file"]["file_id"]
print(f"File ID of the cloned audio: {file_id}")

# 2. 上传示例音频

with open("/path/to/clone_prompt.mp3", "rb") as f:
files = {"file": ("clone_prompt.mp3", f)}
data = {"purpose": "prompt_audio"}
response = requests.post(upload_url, headers=headers, data=data, files=files)
prompt_file_id = response.json()["file"]["file_id"]
print(f"File ID of the prompt audio: {prompt_file_id}")

# 3. 进行音色克隆

clone_payload = {
"file_id": file_id,
"voice_id": "<your_custom_voice_id>",
"clone_prompt": {
"prompt_audio": prompt_file_id,
"prompt_text": "后来认为啊,是有人抓这鸡,可是抓鸡的地方呢没人听过鸡叫。"
},
"text": "大兄弟,听您口音不是本地人吧,头回来天津卫,啊,待会您可甭跟着导航走,那玩意儿净给您往大马路上绕。",
"model": "speech-2.5-hd-preview"
}
clone_headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
response = requests.post(clone_url, headers=clone_headers, json=clone_payload)
print(response.text)

结果示例

  • 复刻音频
  • 示例音频
  • 结果音频
I