Skip to content
上新Nano Banana 2.1 已上线:Google 新一代生图模型,单张低至 $0.0336,原生 4K,约上一代半价查看模型
HopBase
← 返回博客

MiniMax 音色克隆 API + OpenAI SDK 合成教程

先说答案:用 MiniMax 克隆一个音色只需要调两个接口,克隆出来的音色可以直接在 OpenAI 的语音合成 SDK 里用。第一步,把一段 10 秒到 5 分钟的录音(.mp3 / .m4a / .wav,不超过 20 MB)以 purpose=voice_clone 上传到 POST https://api.hop-base.com/v1/files/upload。第二步,用返回的 file_id 加上你自己起的 voice_id,调用 POST /v1/voice_clone。之后在 OpenAI 兼容的 /v1/audio/speech 接口里,把这个 voice_id 作为 voice 传入,模型选 speech-2.8-hd 或 speech-2.8-turbo 即可。用 OpenAI SDK 的话,只需要改 base_url、model 和 voice 三处。上传和克隆本身都免费;价格页公布的克隆费是每个音色 $1.5,在这个音色第一次成功合成时收取一次。合成按字符计费:HD 每百万字符 $100,Turbo 每百万字符 $60,一个汉字按 2 个字符算。克隆后 7 天内没有用来合成的音色会被删除,这种情况不收克隆费。

开始前要准备什么

  • 一个 HopBase API Key,所在分组要包含 MiniMax 语音模型(speech-2.8-hd、speech-2.8-turbo)。可以直接把这个分组加到你现有的对话或视频 Key 上,不用另建。用 GET /v1/models 确认。
  • 一段干净的录音:10 秒到 5 分钟,格式为 .mp3 / .m4a / .wav,不超过 20 MB。只有一个人说话、背景噪声小、语速自然,效果最好。
  • 这个声音的使用权。只能克隆你本人的声音,或者已取得说话人明确书面授权的声音。合法使用由你负责,包括深度合成和肖像相关的规定。

第一步:上传录音

POST /v1/files/upload 使用 multipart/form-data,只能有 purpose 和 file 两个字段,多传任何字段都会返回 400。

curl https://api.hop-base.com/v1/files/upload \
  -H "Authorization: Bearer sk-你的密钥" \
  -F purpose=voice_clone \
  -F file=@my_voice.mp3
# → {"file":{"file_id":123456789,"bytes":...,"filename":"my_voice.mp3","purpose":"voice_clone"},"base_resp":{...}}

格式和大小在上传时检查,时长在克隆时检查。如果还想给模型一段示例音频,另外用 purpose=prompt_audio 上传,长度要在 8 秒以内。

第二步:克隆音色

curl https://api.hop-base.com/v1/voice_clone \
  -H "Authorization: Bearer sk-你的密钥" \
  -H "Content-Type: application/json" \
  -d '{
    "file_id": 123456789,
    "voice_id": "MyNarrator01",
    "text": "你好,这是我克隆出来的声音。",
    "model": "speech-2.8-hd",
    "need_noise_reduction": true
  }'

主要字段说明:

字段规则
file_id必填,第一步拿到的整数。每个文件只能用一次。
voice_id必填,8-256 个字符,只能用字母、数字、- 和 _。必须以字母开头,不能以 - 或 _ 结尾,在你的账号内不能重复。
text + model可选的试听文本,最多 1,000 字符。传了 text 就必须传 model。返回里会带 demo_audio 试听链接,24 小时有效;试听文本按语音字符计费。
clone_prompt可选,格式为 {"prompt_audio": <file_id>, "prompt_text": "..."},两个键都必须有。prompt_text 是示例音频的逐字稿,结尾要带标点。
text_validation / accuracy可选的质量校验:给出预期的逐字稿(最多 200 字符)和通过阈值(0-1,默认 0.7)。语音识别结果对不上,克隆就会失败。
need_noise_reduction、need_volume_normalization、aigc_watermark可选的布尔值,默认都是 false。

这套流程和 MiniMax 官方的音色克隆 API 一致,按 MiniMax 官方 SDK 写的代码,换成 HopBase 的 Base URL 和 Key 就能直接用。

第三步:在 OpenAI SDK 里使用克隆音色

选 OpenAI 兼容接口最大的好处是:现有的 client.audio.speech.create 代码不用重写,只要把 voice 换成新的 voice_id:

from openai import OpenAI

client = OpenAI(base_url="https://api.hop-base.com/v1", api_key="sk-你的密钥")

response = client.audio.speech.create(
    model="speech-2.8-turbo",
    voice="MyNarrator01",          # 你克隆的 voice_id
    input="欢迎回来,下面是今天的产品更新。",
    response_format="mp3",
)
response.write_to_file("update.mp3")

curl 写法:

curl https://api.hop-base.com/v1/audio/speech \
  -H "Authorization: Bearer sk-你的密钥" \
  -H "Content-Type: application/json" \
  -d '{"model": "speech-2.8-turbo", "input": "又见面了。", "voice": "MyNarrator01"}' \
  --output cloned.mp3

OpenAI 兼容接口的限制:input 最多 4,096 字符;response_format 可选 mp3 / opus / flac / wav / pcm,传 aac 会返回 400;speed 范围是 0.25-4。返回的是完整的原始音频。原生接口的字段,比如 voice_setting、language_boost,在这个接口上会被拒绝。

什么时候改用原生接口

如果是长稿、需要控制情绪,或者要流式输出,就调用 POST /v1/t2a_v2,音色放在 voice_setting.voice_id。这个接口最多接受 10,000 字符,支持 stream: true。我们用短文本实测:同步接口约 1.5-2.4 秒返回完整音频;开启流式后,约 1 秒收到第一个音频块。流式时记得设置 stream_options.exclude_aggregated_audio: true,否则最后一个事件会把整段音频再发一遍,直接拼接会得到双份音频。完整参数见语音合成文档。

容易踩坑的生命周期规则

  • 上传的文件只能用一次。克隆成功后,源文件和示例文件都会被删掉,想再克隆就得重新上传。克隆失败时文件会保留,可以直接重试。
  • 没用过的文件 24 小时后过期。删除文件不会影响已经克隆好的音色。
  • 7 天内要用一次。克隆后 7 天内没有用来合成的音色会被删除,这种情况不收克隆费。哪怕只合成一句话,音色也会保留下来。
  • 音色是私有的。克隆的音色属于你的账号;企业账号下,同一企业主名下的成员 Key 可以共用。其他账号即使知道 voice_id 也用不了。
  • 管理操作免费。POST /v1/get_voice 传 {"voice_type": "voice_cloning"} 可以列出你的音色,POST /v1/delete_voice 可以删除音色并释放这个名字。

费用

项目公开价格
上传与克隆免费
克隆费每个音色 $1.5,在该音色第一次成功合成时收取一次
speech-2.8-hd每百万计费字符 $100
speech-2.8-turbo每百万计费字符 $60

计费字符的算法:每个 Unicode 字符算 1,汉字(CJK)额外加 1,也就是一个汉字算 2;标点、空格、emoji 和 <#0.5#> 这类停顿标记各算 1。例如 你好,世界 有 5 个字符,其中 4 个是汉字,计费 9 个字符。一篇 3,000 个汉字的中文稿约 6,000 个计费字符,按牌价 Turbo 约 $0.36,HD 约 $0.60;新音色第一次使用时,另外收一次 $1.5。克隆费在那次请求的使用记录里单独显示为一行 voice_clone_activation。被 400 拒绝的请求和合成中途失败的请求都不计费。最新牌价见价格页,你所在分组的单价以登录后模型目录显示的为准。

常见报错

报错信息怎么处理
file_id ... does not exist; uploaded files are single-use and expire 24 hours after upload重新上传录音
voice_id ... already exists换一个名字,或者先删除旧音色
audio duration out of range源音频要在 10 秒到 5 分钟之间,示例音频要在 8 秒以内
voice id not existID 写错了,或者音色已被删除,或者 7 天没用已过期。重新克隆即可。
voice cloning is temporarily unavailable(503)稍后重试

另一个选择:豆包声音复刻

HopBase 也提供字节跳动的 seed-icl-2.0(豆包声音复刻 2.0),接法不太一样:录音以 base64 形式直接放进 POST /v1/voice_clone 的 JSON 里(录音不超过 10 MB,请求体不超过 16 MiB),每次调用都要带 "model": "seed-icl-2.0"。返回的 voice_id 以 hbv_ 开头,只能配合 seed-icl-2.0 在 /v1/audio/speech 上使用。豆包不收克隆费,合成按官方牌价每万字符 ¥3。公测期间每个账号只能保留 1 个复刻音色。如果 MiniMax 和豆包的克隆都要用,请各用一个 Key。详见同一篇语音文档。

常见问题

MiniMax 克隆的音色能用 OpenAI Python SDK 调用吗?

可以。把客户端的地址指向 https://api.hop-base.com/v1,model 选 speech-2.8-hd 或 speech-2.8-turbo,在 client.audio.speech.create 里把 voice_id 作为 voice 传入就行,其他代码不用改。

源录音要多长?

10 秒到 5 分钟之间,格式为 .mp3 / .m4a / .wav,不超过 20 MB。可选的示例音频要在 8 秒以内。

$1.5 的克隆费什么时候收?

在音色第一次成功合成时收一次。上传和克隆本身免费;克隆接口里的试听 text 只按语音字符计费,不算作首次使用。如果音色一直没用、7 天后过期了,就不收克隆费。

克隆的音色为什么突然用不了了?

最常见的原因是克隆后 7 天内没有用它合成过,音色已被删除。用 POST /v1/get_voice 查一下,必要时重新克隆。注意要重新上传录音,因为上传的文件只能用一次。

克隆音色能流式合成吗?

可以,用原生接口 POST /v1/t2a_v2,设置 stream: true,并把 voice_setting.voice_id 设为你的音色。OpenAI 兼容接口一次返回完整音频,不支持 stream_format。

怎么告诉模型文本是哪种语言?

用 language_boost,原生接口和克隆接口都可以设置。它有 40 个选项,包括中文、粤语(Chinese,Yue)、英语、日语、韩语、西班牙语、法语、德语、阿拉伯语、印地语等,也可以设为 auto 自动识别。克隆音色在录音语言以外的语种上效果如何,取决于源录音,建议先用一小段试听验证。完整列表见语音合成文档。