Skip to content
NEWNano Banana 2.1 が登場 — Google の最新画像生成モデル、1 枚 $0.0336 から、ネイティブ 4K、前世代の約半額モデルを見る
HopBase
← ブログに戻る

MiniMax 音声クローン API を OpenAI SDK で使う

結論から言うと、MiniMax での音声クローンは API 呼び出し 2 回で完了し、できた声は標準の 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 を呼び出します。以降は、その voice_id を voice として、speech-2.8-hd または speech-2.8-turbo とともに OpenAI 互換の /v1/audio/speech エンドポイントに渡すだけです。OpenAI SDK では base_url、model、voice の 3 つを変えるだけで済みます。アップロードとクローンは無料です。公表されているクローン料金は 1 ボイスあたり $1.5 で、そのボイスで初めて音声合成に成功したときに 1 回だけ課金されます。音声合成は文字数課金で、HD は 100 万文字あたり $100、Turbo は 100 万文字あたり $60、漢字は 1 文字を 2 文字として数えます。クローンしたボイスを 7 日以内に使わなかった場合は削除され、その場合クローン料金はかかりません。

始める前に必要なもの

  • MiniMax Speech モデル(speech-2.8-hd、speech-2.8-turbo)を含むグループが付いた HopBase の API キー。チャットや動画ですでに使っているキーにこのグループを追加することもできます。GET /v1/models で確認してください。
  • クローンしたい声のクリアな録音:長さ 10 秒〜5 分、.mp3、.m4a、.wav のいずれか、最大 20 MB。話者が 1 人で、背景ノイズが少なく、自然なペースで話している録音ほど良い結果になります。
  • その声を使用する権利。クローンしてよいのは、ご自身の声か、話者から書面で明確な許可を得た声だけです。ディープシンセシスや肖像に関する規制を含め、適法な利用についてはご自身の責任となります。

ステップ 1:録音をアップロードする

POST /v1/files/upload は multipart/form-data で、フィールドは purpose と file の 2 つだけを受け付けます。それ以外のフィールドを含めると 400 が返ります。

curl https://api.hop-base.com/v1/files/upload \
  -H "Authorization: Bearer sk-YOUR_KEY" \
  -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 秒未満である必要があります。

ステップ 2:声をクローンする

curl https://api.hop-base.com/v1/voice_clone \
  -H "Authorization: Bearer sk-YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "file_id": 123456789,
    "voice_id": "MyNarrator01",
    "text": "Hello, this is my cloned voice.",
    "model": "speech-2.8-hd",
    "need_noise_reduction": true
  }'

押さえておくべきフィールドは次のとおりです。

フィールドルール
file_id必須。ステップ 1 で得た整数。各ファイルは 1 回しか使えません。
voice_id必須。8〜256 文字で、英字、数字、-、_ が使えます。先頭は英字で、末尾を - や _ にすることはできず、アカウント内で一意である必要があります。
text + model任意のプレビュー用テキストで、最大 1,000 文字。text を送る場合は model が必須です。レスポンスには 24 時間有効なプレビューリンク demo_audio が含まれ、プレビューは音声合成の文字数として課金されます。
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 向けに書いたコードも、ベース URL とキーを変えれば動作します。

ステップ 3:クローンした声を 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-YOUR_KEY")

response = client.audio.speech.create(
    model="speech-2.8-turbo",
    voice="MyNarrator01",          # your cloned voice_id
    input="Welcome back. Here is today's product update.",
    response_format="mp3",
)
response.write_to_file("update.mp3")

curl の場合は次のとおりです。

curl https://api.hop-base.com/v1/audio/speech \
  -H "Authorization: Bearer sk-YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "speech-2.8-turbo", "input": "Hello again.", "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 などネイティブ API のフィールドは、このエンドポイントでは拒否されます。

ネイティブエンドポイントを使うべきとき

長い原稿、感情のコントロール、ストリーミングが必要な場合は、POST /v1/t2a_v2 を呼び出し、ボイスを voice_setting.voice_id として渡します。最大 10,000 文字を受け付け、stream: true に対応しています。短いテキストでの私たちの計測では、同期エンドポイントはクリップ全体を約 1.5-2.4 秒で返し、ストリーミングでは最初の音声チャンクが約 1 秒で届きました。ストリーミング時は stream_options.exclude_aggregated_audio: true を設定してください。設定しないと最後のイベントでクリップ全体が繰り返され、単純に連結すると音声が二重になります。パラメータの詳細は音声合成のドキュメントをご覧ください。

つまずきやすいライフサイクルのルール

  • アップロードしたファイルは 1 回しか使えません。クローンに成功すると元ファイルとプロンプト用ファイルの両方が削除されるため、もう一度クローンするには再アップロードが必要です。クローンに失敗した場合はファイルが残るので、そのままリトライできます。
  • 未使用のアップロードは 24 時間で期限切れになります。ファイルを削除しても、すでにクローン済みのボイスには一切影響しません。
  • ボイスは 7 日以内に使ってください。クローンから 7 日以内に音声合成に使われなかったボイスは削除され、その場合クローン料金はかかりません。短い一文でも合成すればボイスは保持されます。
  • ボイスはプライベートです。クローンしたボイスはお客様のアカウントに属します。法人アカウントでは、オーナー配下のメンバーキーで共有されます。他のアカウントは、voice_id を知っていても使用できません。
  • 管理操作は無料です。{"voice_type": "voice_cloning"} を付けた POST /v1/get_voice でボイスの一覧を取得でき、POST /v1/delete_voice でボイスを削除して名前を解放できます。

料金

項目公表価格
アップロードとクローン無料
クローン料金1 ボイスあたり $1.5。そのボイスで初めて音声合成に成功したときに 1 回だけ課金
speech-2.8-hd課金対象 100 万文字あたり $100
speech-2.8-turbo課金対象 100 万文字あたり $60

課金文字数の数え方:Unicode の文字はすべて 1 文字、漢字(CJK)は 1 文字を 2 文字として数えます。句読点、スペース、絵文字、<#0.5#> のようなポーズ記号は 1 文字です。たとえば Hello, world. は課金対象 13 文字になります。英語で約 6,000 文字の原稿なら、定価で Turbo は約 $0.36、HD は約 $0.60 で、新しいボイスを初めて使うときにだけ 1 回限りの $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 exist入力ミス、またはボイスが削除されたか 7 日間未使用で期限切れになっています。もう一度クローンしてください。
voice cloning is temporarily unavailable(503)しばらくしてからリトライする

もう 1 つの選択肢:Doubao の音声クローン

HopBase では ByteDance の seed-icl-2.0(Doubao Voice Cloning 2.0)も提供しており、こちらはセットアップ方法が異なります。録音は base64 にして POST /v1/voice_clone の JSON ボディに入れ(最大 10 MB、ボディ全体は最大 16 MiB)、すべての呼び出しで "model": "seed-icl-2.0" が必要です。返される voice_id は hbv_ で始まり、/v1/audio/speech で seed-icl-2.0 と組み合わせる場合にのみ使えます。クローン料金はなく、音声合成は公式定価で 1 万文字あたり ¥3 です。ベータ期間中は 1 アカウントにつきクローンボイスを 1 つ保持できます。MiniMax と Doubao の両方の音声クローンを使う場合は、それぞれ別のキーを使ってください。詳細は同じ音声合成のドキュメントにあります。

よくある質問

MiniMax でクローンした声を OpenAI の Python SDK で使えますか?

はい。クライアントの接続先を https://api.hop-base.com/v1 にし、model を speech-2.8-hd または speech-2.8-turbo に設定して、client.audio.speech.create で voice に voice_id を渡してください。コードのそれ以外の部分は変更不要です。

元の録音はどれくらいの長さが必要ですか?

10 秒〜5 分で、.mp3、.m4a、.wav のいずれか、最大 20 MB です。任意のプロンプト用クリップは 8 秒未満にしてください。

$1.5 のクローン料金はいつ課金されますか?

そのボイスで初めて音声合成に成功したときに 1 回だけです。アップロードとクローンは無料で、クローン呼び出し時のプレビュー用 text は音声合成の文字数として課金されるだけで、初回利用とはみなされません。ボイスを一度も使わずに 7 日で期限切れになった場合、クローン料金はかかりません。

クローンした声が使えなくなったのはなぜですか?

最も多いのは、クローンから 7 日以内に音声合成に使われず、削除されたケースです。POST /v1/get_voice で確認し、必要ならもう一度クローンしてください。アップロードしたファイルは 1 回しか使えないため、録音の再アップロードが必要です。

クローンした声でストリーミング合成できますか?

はい。ネイティブの POST /v1/t2a_v2 エンドポイントで stream: true を指定し、voice_setting.voice_id にボイスを設定してください。OpenAI 互換エンドポイントはクリップ全体を 1 回のレスポンスで返し、stream_format には対応していません。

テキストの言語をモデルに伝えるにはどうすればよいですか?

language_boost を使います。これはネイティブエンドポイントとクローン呼び出しで利用できます。英語、中国語、広東語(Chinese,Yue)、日本語、韓国語、スペイン語、フランス語、ドイツ語、アラビア語、ヒンディー語などを含む 40 の選択肢があり、言語を自動判定する auto もあります。録音した言語以外でクローンした声がどれだけ自然に聞こえるかは元の音声次第なので、まず短いプレビューでテストしてください。全一覧は音声合成のドキュメントにあります。