カスタム音声を使うと、エージェントやアプリケーション向けに独自の音声を作成できます。作成した音声は、テキスト読み上げ API、Realtime API、または音声出力に対応した Chat Completions API の音声出力に使用できます。
カスタム音声を作成するには、モデルが再現する際の参照となる短い音声サンプルを提供します。
Custom voices are limited to eligible customers. Contact our sales team to learn more. Once enabled for your organization, you’ll have access to the Voices tab under Audio.
音声の作成
現在、音声の作成には API リクエストが必要です。利用できる API 操作の一覧は、API リファレンスを参照してください。
音声を作成するには、次の 2 種類の録音が必要です。
- 同意の録音: 声の提供者が、自分の声を再現する音声の作成に同意する旨を録音したものです。提供者は、以下の同意文のいずれかを読み上げる必要があります。
- サンプル録音: モデルが再現の基準とする実際の音声サンプルです。声は同意の録音と一致する必要があります。
高品質な音声を作成するためのヒント
カスタム音声の品質は、提供するサンプルの品質に大きく左右されます。録音品質を最適化することで、結果が大きく変わることがあります。
- 反響が少ない静かな場所で録音してください。
- プロ仕様の XLR マイクを使用してください。
- マイクとの間にポップフィルターを置き、約 7~8 インチの距離を一定に保ってください。
- モデルは、声の調子、リズム、勢い、間の取り方、話し方の癖まで、提供された音声をそのまま再現します。そのため、実現したい声で録音してください。録音全体を通して、声の勢い、話し方、アクセントを一定に保ってください。
- 音声サンプルのわずかな違いによって、生成される音声の品質が変わることがあります。複数のサンプルを試して、最適なものを見つけてください。
要件と制限
- 組織ごとに作成できる音声は最大 20 個です。
- 音声サンプルは 30 秒以内である必要があります。
- 音声サンプルは、
mpeg、wav、ogg、aac、flac、webm、mp4のいずれかの形式である必要があります。
追加の利用条件については、テキスト読み上げ補足契約を参照してください。
音声の同意の作成
同意の音声録音には、以下の同意文のいずれか 1 つだけを含める必要があります。文面から少しでも逸脱すると、処理は失敗します。
| 言語 | 同意文 |
|---|---|
de | Ich bin der Eigentümer dieser Stimme und bin damit einverstanden, dass OpenAI diese Stimme zur Erstellung eines synthetischen Stimmmodells verwendet. |
en | I am the owner of this voice and I consent to OpenAI using this voice to create a synthetic voice model. |
es | Soy el propietario de esta voz y doy mi consentimiento para que OpenAI la utilice para crear un modelo de voz sintética. |
fr | Je suis le propriétaire de cette voix et j'autorise OpenAI à utiliser cette voix pour créer un modèle de voix synthétique. |
hi | मैं इस आवाज का मालिक हूं और मैं सिंथेटिक आवाज मॉडल बनाने के लिए OpenAI को इस आवाज का उपयोग करने की सहमति देता हूं |
id | Saya adalah pemilik suara ini dan saya memberikan persetujuan kepada OpenAI untuk menggunakan suara ini guna membuat model suara sintetis. |
it | Sono il proprietario di questa voce e acconsento che OpenAI la utilizzi per creare un modello di voce sintetica. |
ja | 私はこの音声の所有者であり、OpenAIがこの音声を使用して音声合成 モデルを作成することを承認します。 |
ko | 나는 이 음성의 소유자이며 OpenAI가 이 음성을 사용하여 음성 합성 모델을 생성할 것을 허용합니다. |
nl | Ik ben de eigenaar van deze stem en ik geef OpenAI toestemming om deze stem te gebruiken om een synthetisch stemmodel te maken. |
pl | Jestem właścicielem tego głosu i wyrażam zgodę na wykorzystanie go przez OpenAI w celu utworzenia syntetycznego modelu głosu. |
pt | Eu sou o proprietário desta voz e autorizo o OpenAI a usá-la para criar um modelo de voz sintética. |
ru | Я являюсь владельцем этого голоса и даю согласие OpenAI на использование этого голоса для создания модели синтетического голоса. |
uk | Я є власником цього голосу і даю згоду OpenAI використовувати цей голос для створення синтетичної голосової моделі. |
vi | Tôi là chủ sở hữu giọng nói này và tôi đồng ý cho OpenAI sử dụng giọng nói này để tạo mô hình giọng nói tổng hợp. |
zh | 我是此声音的拥有者并授权OpenAI使用此声音创建语音合成模型 |
続いて、API 経由で録音をアップロードします。アップロードに成功すると、後で参照する同意の録音 ID が返されます。同じ声の提供者が音声の作成を複数回試す場合は、同じ同意を再利用できます。
curl https://api.openai.com/v1/audio/voice_consents \
-X POST \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-F "name=test_consent" \
-F "language=en" \
-F "recording=@$HOME/tmp/voice_consent/consent_recording.wav;type=audio/x-wav"音声の作成
次に、同意の録音 ID を参照し、音声サンプルを提供して、実際の音声を作成します。
curl https://api.openai.com/v1/audio/voices \
-X POST \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-F "name=test_voice" \
-F "audio_sample=@$HOME/tmp/voice_consent/audio_sample_recording.wav;type=audio/x-wav" \
-F "consent=cons_123abc"作成に成功すると、作成した音声が 音声タブに表示されます。
音声生成での音声の使用
音声生成の手順は通常と同じです。音声を生成するとき、またはリアルタイムセッションを開始するときに、voice パラメーターで音声の ID を指定します。
テキスト読み上げの例
curl https://api.openai.com/v1/audio/speech \
-X POST \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4o-mini-tts",
"voice": {
"id": "voice_123abc"
},
"input": "Maple est le meilleur golden retriever du monde entier.",
"language": "fr",
"format": "wav"
}' \
--output sample.wavRealtime API の例
Ruby の場合は、サンプルを実行する前に voice_123 をカスタム音声の ID に置き換えてください。
const sessionConfig = JSON.stringify({
session: {
type: "realtime",
model: "gpt-realtime-2",
audio: {
output: {
voice: { id: "voice_123abc" },
},
},
},
});GPT-Live でのカスタム音声の使用
GPT-Live とカスタム音声の作成の両方で使用が承認された、プロジェクトをスコープとする API キーを使用してください。
同意文の読み取りとカスタム音声の使用には、
api.voices.read が必要です。同意と音声の作成には、api.voices.write と
カスタム音声 API へのアクセス権が必要です。すべてのリクエストで同じプロジェクトを使用し、
API キーは信頼できるサーバー上に保管してください。
録音の準備
録音前に、現在サポートされている同意文の一覧を取得します。
curl https://api.openai.com/v1/audio/consent_phrases \
-H "Authorization: Bearer $OPENAI_API_KEY"
同意の録音と参照サンプルは、同じ人の音声である必要があります。サンプルには、実際の発話が 5 秒以上、かつ文字起こししたテキストが 15 トークン以上含まれている必要があります。無音部分はカウントされません。完全な文を複数含む、10~30 秒の録音を使用してください。アップロードごとのサイズ上限は 10 MiB です。参照サンプルの文字起こしはサービス側で抽出されるため、文字起こしのトークンのアップロード、デコーダーの設定、カスタムリクエストヘッダーの追加は行わないでください。
ブラウザの録音機能では、音声に audio/webm;codecs=opus という MIME タイプが付くことがありますが、アップロード先のエンドポイントはこの形式を拒否します。
アップロードリクエストを作成する際は、元の音声のバイト列を保持したまま、サポートされている基本 MIME タイプ audio/webm を使用してください。
上記の同意登録リクエストと音声作成リクエストを使用し、
返された音声 ID を保存してください。
セッション作成時の音声選択
カスタム音声は、文字列 "voice_123" ではなくオブジェクト { "id": "voice_123" } として渡してください。
"marin" などの名前付き音声には文字列を使用します。
gpt-live-1 は、英語のアクセントを持つカスタム音声をサポートしています。
アクセントを使用するには、session.instructions にも "Speak British English" や "Speak
Irish English." などの指示を指定してください。以下の例ではイギリス英語を使用しています。
カスタム音声に使用したいアクセントに合わせて指示を変更してください。
最初のセッションに以下の設定を含めてください。
{
"model": "gpt-live-1",
"instructions": "You are a helpful voice assistant. Speak British English.",
"audio": { "output": { "voice": { "id": "voice_123" } } }
}
WebRTC では、信頼できるセッションブローカーが、
JSON 内で transport と並ぶ session フィールドにこの設定を入れます。
Live エンドポイントには、マルチパート形式や生の SDP ではなく JSON が必要です。
作成されたセッションの ID は session.id から、SDP アンサーは transport.sdp から読み取ります。
ホストされているブローカーへのリクエストは、アプリケーションの認証情報で認証してください。
OpenAI API キーをブラウザに公開してはいけません。
WebSockets では、最初の session.start イベントに設定を含めてください。
クエリパラメーターを付けずに接続し、
session.started を受信してから音声のストリーミングを開始します。
音声は session.input_audio.append で送信します。session.close を送信した後も、
session.closed で最終的な使用量が通知されるまで受信を続けてください。
アクセスとライフサイクルに関するエラーへの対処
- Live セッションの開始後は、出力音声を変更できません。別の音声を使用するには、新しいセッションを開始してください。
- 削除または取り消された音声、別のプロジェクトの同意、カスタム音声へのアクセス権の不足は、
404として報告されることがあります。 - 音声の形式が不正な場合、話者が一致しない場合、またはキーのスコープがプロジェクトに限定されていない場合は、リクエストが拒否されます。
音声を作成する前に、プロジェクトの権限、録音の最低要件、アップロードの制限を確認してください。 セッションのセットアップ要件については、 GPT-Live のはじめにを参照してください。