Gemini TTS で音声を生成する

Gemini テキスト読み上げ(TTS)モデルは、テキストを単一話者または複数話者の音声に変換します。構造化されたターン メタデータ(speech_metadata)とインライン音声タグを使用して、音声のスタイル、アクセント、ペース、トーンを制御できます。

このページでは、Gemini Enterprise API の generateContent メソッドと streamGenerateContent メソッドを使用して、次のモデルで音声を生成する方法について説明します。

TTS モデルは、ナレーション、オーディオブック、音声エージェントのレスポンスなど、スタイルと音声をきめ細かく制御して、テキストを正確に読み上げるように調整されています。音声入力と音声出力を使用したインタラクティブなリアルタイム会話には、代わりに Gemini Live API を使用します。

gemini-3.1-flash-tts-preview などの以前の Gemini TTS モデルを使用している場合は、移行ガイドをご覧ください。

コードを記述せずに単一話者の音声生成を試すには、Agent Studio で Gemini 3.8 Flash TTS を開きます。

Agent Studio で Gemini 3.8 TTS を試す

サポートされているモデル

モデル 単一話者 複数話者 ストリーミング 音声デザイン(プレビュー) ボイス レプリケーション(プレビュー)
Gemini 3.8 Flash TTS(gemini-3.8-flash-tts)
Gemini 3.8 Flash-Lite TTS(gemini-3.8-flash-lite-tts)
Gemini 3.1 Flash TTS プレビュー(gemini-3.1-flash-tts-preview)
Gemini 2.5 Pro TTS(gemini-2.5-pro-tts)
Gemini 2.5 Flash TTS(gemini-2.5-flash-tts)

このページのサンプルと機能は、Gemini 3.8 TTS モデルに適用されます。以前のモデルについては、Google Cloud Text-to-Speech ドキュメントの Gemini-TTS をご覧ください。

どのモデルをいつ使用するか

どちらの Gemini 3.8 TTS モデルも同じリクエスト スキーマとプロンプト形式を共有しているため、モデル ID を変更することで切り替えることができます。

  • 音響の忠実度、ニュアンスのある演技、表現力豊かなコントロールが最優先事項である場合は、Gemini 3.8 Flash TTS(gemini-3.8-flash-tts)を使用します。スタジオレベルのクリエイティブな作業、複数の話者による複雑な会話、頻繁な音声バーストタグ、難しい発音、地域や少数派の方言、安定した音声と部屋のトーンが必要な長文のナレーションに適しています。
  • Gemini 3.8 Flash-Lite TTS(gemini-3.8-flash-lite-tts)は、高速で費用対効果の高い本番環境ワークロードに使用します。gemini-3.1-flash-tts-preview の推奨される代替モデルであり、大量のバッチ処理、会話型音声エージェントのカスケード、読み上げ機能、ボイス レプリケーション、主要言語での日常的な単一話者の音声に適しています。

始める前に

  1. プロジェクトを設定して Gemini Enterprise API を有効にします。
  2. 開発環境にアプリケーションのデフォルト認証情報を構成します。
  3. Python サンプルを使用するには、バージョン 2.33.0 以降の Google Gen AI SDK をインストールします。

    pip install --upgrade "google-genai>=2.33.0"
    

利用可能なロケーションとリージョン エンドポイント

Gemini 3.8 TTS モデルは、global ロケーション、us と eu のマルチリージョン ロケーションで使用できます。

ロケーション location パラメータ エンドポイント
グローバル global https://aiplatform.googleapis.com
米国(マルチリージョン) us https://aiplatform.us.rep.googleapis.com
欧州連合(マルチリージョン) eu https://aiplatform.eu.rep.googleapis.com

ストリーミング リクエストの最初の音声までの時間(TTFA)を短縮するには、global エンドポイントではなく、us または eu マルチリージョン エンドポイントを使用します。global エンドポイントは、世界中のリージョン間でリクエストをルーティングします。これにより、最初の音声チャンクが到着する前にネットワーク レイテンシが増加する可能性があります。

リクエストをリージョン エンドポイントに転送するには、SDK でクライアントを初期化するときに location="us"(または location="eu")を設定するか、REST URL で一致するロケーション パスを使用して、対応するマルチリージョン ホスト名(https://aiplatform.us.rep.googleapis.com または https://aiplatform.eu.rep.googleapis.com)にリクエストを送信します。

Python

from google import genai

# Set location to 'us' or 'eu' for multi-region routing (or 'global' for global)
client = genai.Client(
    enterprise=True,
    project="PROJECT_ID",
    location="us",
)

response = client.models.generate_content(
    model="gemini-3.8-flash-tts",
    contents=[{
        "role": "user",
        "parts": [{
            "text": "Have a wonderful day!",
            "speech_metadata": {"style": "cheerful and friendly"},
        }],
    }],
    config={
        "response_modalities": ["AUDIO"],
        "speech_config": {"voice_config": {"voice": "Kore"}},
    },
)

with open("out.wav", "wb") as f:
    f.write(response.candidates[0].content.parts[0].inline_data.data)

REST

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  https://aiplatform.us.rep.googleapis.com/v1/projects/PROJECT_ID/locations/us/publishers/google/models/gemini-3.8-flash-tts:generateContent \
  -d '{
    "contents": [{
      "role": "user",
      "parts": [{
        "text": "Have a wonderful day!",
        "speechMetadata": {"style": "cheerful and friendly"}
      }]
    }],
    "generationConfig": {
      "responseModalities": ["AUDIO"],
      "speechConfig": {
        "voiceConfig": {"voice": "Kore"}
      }
    }
  }' | jq -r '.candidates[0].content.parts[0].inlineData.data' | base64 --decode > out.wav

単一話者 TTS

テキストを単一話者の音声に変換するには、parts[].text で逐語的な文字起こしを渡し、parts[].speech_metadata でオプションのターンレベルのスタイル設定を追加し、speechConfig.voiceConfig.voice で音声を設定します。voice フィールドには、事前構築済みの音声名、拡張音声ライブラリの音声 ID、設計または複製された音声の ID(voice_...)(またはオプションのステートレス voicekey_... キー)を指定できます。

デフォルトでは、単項リクエストは完全な WAV ファイル(16 ビット PCM、24 kHz、モノラル)を返すため、音声バイトを .wav ファイルに直接書き込むことができます。ストリーミング リクエストでは、代わりに未加工の PCM チャンクが返されます。詳細とその他のエンコードについては、オーディオ出力形式をご覧ください。

コンソール

  1. Agent Studio で Gemini 3.8 Flash TTS または Gemini 3.8 Flash-Lite TTS を開きます。
  2. 設定パネルで、事前構築済みの音声、言語(または [自動検出] のまま)、オプションのスタイルの説明(例: cheerful and friendly)を選択します。
  3. プロンプト ボックスに読み上げる音声文字変換を入力して送信し、WAV 音声を生成、再生、またはダウンロードします。[コードを取得] をクリックして、リクエストを Python、JavaScript、または curl としてエクスポートします。

Python

from google import genai

client = genai.Client(enterprise=True, project="PROJECT_ID", location="global")

response = client.models.generate_content(
    model="gemini-3.8-flash-tts",
    contents=[{
        "role": "user",
        "parts": [{
            "text": "Have a wonderful day!",
            "speech_metadata": {"style": "cheerful and friendly"},
        }],
    }],
    config={
        "response_modalities": ["AUDIO"],
        "speech_config": {"voice_config": {"voice": "Kore"}},
    },
)

# The SDK has already decoded the base64 audio, so inline_data.data is a
# complete WAV file by default.
with open("out.wav", "wb") as f:
    f.write(response.candidates[0].content.parts[0].inline_data.data)

REST

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  https://aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/global/publishers/google/models/gemini-3.8-flash-tts:generateContent \
  -d '{
    "contents": [{
      "role": "user",
      "parts": [{
        "text": "Have a wonderful day!",
        "speechMetadata": {"style": "cheerful and friendly"}
      }]
    }],
    "generationConfig": {
      "responseModalities": ["AUDIO"],
      "speechConfig": {
        "voiceConfig": {"voice": "Kore"}
      }
    }
  }' | jq -r '.candidates[0].content.parts[0].inlineData.data' | base64 --decode > out.wav

単一話者のストリーミング TTS

モデルが音声を合成している間に音声を受信するには、streamGenerateContent メソッドを使用します。ストリーミング レスポンスは、ヘッダーのない未加工の 16 ビット PCM チャンク(24 kHz、モノラル)を返すため、各チャンクをプレーヤー、ソケット、または別のオーディオ パイプラインに渡すことができます。次の Python サンプルでは、emit_audio 関数がその宛先を表しています。

TTFA を短縮するには、global エンドポイントではなく、us または eu のマルチリージョン エンドポイントにストリーミング リクエストを送信します(リクエストでカスタム音声を使用している場合を除く。カスタム音声には global が必要です)。

Python

from google import genai

# Use 'us' or 'eu' for lower TTFA on streaming requests (or 'global' for custom voices)
client = genai.Client(enterprise=True, project="PROJECT_ID", location="us")

def emit_audio(pcm: bytes) -> None:
    """Sends a chunk of raw 16-bit PCM audio (24 kHz, mono) downstream."""
    # Replace with your audio destination, such as a player, a WebSocket,
    # or a telephony stream.
    print(f"Received {len(pcm)} bytes of audio")

response_stream = client.models.generate_content_stream(
    model="gemini-3.8-flash-lite-tts",
    contents=[{
        "role": "user",
        "parts": [{
            "text": "Have a wonderful day!",
            "speech_metadata": {"style": "cheerful and friendly"},
        }],
    }],
    config={
        "response_modalities": ["AUDIO"],
        "speech_config": {"voice_config": {"voice": "Kore"}},
    },
)

for chunk in response_stream:
    if not chunk.candidates or not chunk.candidates[0].content:
        continue
    for part in chunk.candidates[0].content.parts or []:
        if part.inline_data and part.inline_data.data:
            emit_audio(part.inline_data.data)

REST

curl -N -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  "https://aiplatform.us.rep.googleapis.com/v1/projects/PROJECT_ID/locations/us/publishers/google/models/gemini-3.8-flash-lite-tts:streamGenerateContent?alt=sse" \
  -d '{
    "contents": [{
      "role": "user",
      "parts": [{
        "text": "Have a wonderful day!",
        "speechMetadata": {"style": "cheerful and friendly"}
      }]
    }],
    "generationConfig": {
      "responseModalities": ["AUDIO"],
      "speechConfig": {
        "voiceConfig": {"voice": "Kore"}
      }
    }
  }' | sed -n 's/^data: //p' \
    | jq -r '.candidates[0].content.parts[0].inlineData.data // empty' \
    | while read -r chunk; do echo "$chunk" | base64 --decode; done > streamed.pcm

streamed.pcm ファイルには、24 kHz、モノラルの RAW 16 ビット PCM 音声が含まれています。

マルチスピーカー TTS

2 人の話者間の会話の場合は、speechConfig.multiSpeakerVoiceConfig.speakerVoiceConfigs で両方の話者を構成します。次に、各ターンを個別の part として渡し、すべてのターンで speech_metadata.speaker を構成済みの話者名のいずれかに設定し、オプションのターンレベルの style を追加します。

マルチスピーカー リクエストには、ちょうど 2 つのスピーカーが必要です。

Python

from google import genai

client = genai.Client(enterprise=True, project="PROJECT_ID", location="global")

response = client.models.generate_content(
    model="gemini-3.8-flash-tts",
    contents=[{
        "role": "user",
        "parts": [
            {
                "text": "How's it going today, Jane?",
                "speech_metadata": {"speaker": "Joe", "style": "cheerful and friendly"},
            },
            {
                "text": "Not too bad, how about you? Ready to test these new voices?",
                "speech_metadata": {"speaker": "Jane", "style": "calm and relaxed"},
            },
        ],
    }],
    config={
        "response_modalities": ["AUDIO"],
        "speech_config": {
            "multi_speaker_voice_config": {
                "speaker_voice_configs": [
                    {"speaker": "Joe", "voice_config": {"voice": "Puck"}},
                    {"speaker": "Jane", "voice_config": {"voice": "Kore"}},
                ]
            }
        },
    },
)

with open("dialogue.wav", "wb") as f:
    f.write(response.candidates[0].content.parts[0].inline_data.data)

REST

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  https://aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/global/publishers/google/models/gemini-3.8-flash-tts:generateContent \
  -d '{
    "contents": [{
      "role": "user",
      "parts": [
        {
          "text": "How'\''s it going today, Jane?",
          "speechMetadata": {"speaker": "Joe", "style": "cheerful and friendly"}
        },
        {
          "text": "Not too bad, how about you? Ready to test these new voices?",
          "speechMetadata": {"speaker": "Jane", "style": "calm and relaxed"}
        }
      ]
    }],
    "generationConfig": {
      "responseModalities": ["AUDIO"],
      "speechConfig": {
        "multiSpeakerVoiceConfig": {
          "speakerVoiceConfigs": [
            {"speaker": "Joe", "voiceConfig": {"voice": "Puck"}},
            {"speaker": "Jane", "voiceConfig": {"voice": "Kore"}}
          ]
        }
      }
    }
  }' | jq -r '.candidates[0].content.parts[0].inlineData.data' | base64 --decode > dialogue.wav

マルチスピーカー ストリーミング TTS

マルチスピーカー リクエストはストリーミングもサポートしています。streamGenerateContent メソッドでマルチスピーカー TTS と同じリクエストを使用し、TTFA を短縮するために us または eu マルチリージョン エンドポイントを使用します。

Python

from google import genai

# Use 'us' or 'eu' for lower TTFA on streaming requests
client = genai.Client(enterprise=True, project="PROJECT_ID", location="us")

def emit_audio(pcm: bytes) -> None:
    """Sends a chunk of raw 16-bit PCM audio (24 kHz, mono) downstream."""
    # Replace with your audio destination, such as a player, a WebSocket,
    # or a telephony stream.
    print(f"Received {len(pcm)} bytes of audio")

response_stream = client.models.generate_content_stream(
    model="gemini-3.8-flash-tts",
    contents=[{
        "role": "user",
        "parts": [
            {
                "text": "How's it going today, Jane?",
                "speech_metadata": {"speaker": "Joe", "style": "cheerful and friendly"},
            },
            {
                "text": "Not too bad, how about you? Ready to test these new voices?",
                "speech_metadata": {"speaker": "Jane", "style": "calm and relaxed"},
            },
        ],
    }],
    config={
        "response_modalities": ["AUDIO"],
        "speech_config": {
            "multi_speaker_voice_config": {
                "speaker_voice_configs": [
                    {"speaker": "Joe", "voice_config": {"voice": "Puck"}},
                    {"speaker": "Jane", "voice_config": {"voice": "Kore"}},
                ]
            }
        },
    },
)

for chunk in response_stream:
    if not chunk.candidates or not chunk.candidates[0].content:
        continue
    for part in chunk.candidates[0].content.parts or []:
        if part.inline_data and part.inline_data.data:
            emit_audio(part.inline_data.data)

REST

curl -N -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  "https://aiplatform.us.rep.googleapis.com/v1/projects/PROJECT_ID/locations/us/publishers/google/models/gemini-3.8-flash-tts:streamGenerateContent?alt=sse" \
  -d '{
    "contents": [{
      "role": "user",
      "parts": [
        {
          "text": "How'\''s it going today, Jane?",
          "speechMetadata": {"speaker": "Joe", "style": "cheerful and friendly"}
        },
        {
          "text": "Not too bad, how about you? Ready to test these new voices?",
          "speechMetadata": {"speaker": "Jane", "style": "calm and relaxed"}
        }
      ]
    }],
    "generationConfig": {
      "responseModalities": ["AUDIO"],
      "speechConfig": {
        "multiSpeakerVoiceConfig": {
          "speakerVoiceConfigs": [
            {"speaker": "Joe", "voiceConfig": {"voice": "Puck"}},
            {"speaker": "Jane", "voiceConfig": {"voice": "Kore"}}
          ]
        }
      }
    }
  }' | sed -n 's/^data: //p' \
    | jq -r '.candidates[0].content.parts[0].inlineData.data // empty' \
    | while read -r chunk; do echo "$chunk" | base64 --decode; done > dialogue_streamed.pcm

dialogue_streamed.pcm ファイルには、24 kHz、モノラルの RAW 16 ビット PCM 音声が含まれています。

メタデータとタグを使用して音声スタイルを制御する

Gemini 3.8 TTS モデルは、text フィールドを逐語的な音声文字変換として扱います。"Say cheerfully: Hello!" や "Speaker 1: Hello!" など、テキストに記述された指示が読み上げられることがあります。配信を制御するには、スコープごとに指示を分割します。

  • 持続的なターンレベルの表現(speech_metadata.style): ターン全体に適用される感情、表現スタイル、韻律、ペース、音量を speech_metadata.style に配置します。たとえば、"style": "whispered urgently"、"style": "out of breath"、"style": "warm and enthusiastic" です。
  • ポイントインタイム イベント(インラインタグ): 音声以外の瞬間的な発声や一時停止を、山かっこで囲んで文字起こし内に挿入します。例: "Wait... <short pause> did you hear that? <sigh>"、"Excuse me <cough> as I was saying..."

詳しいガイダンスについては、プロンプト ガイドをご覧ください。

音声オプション

Gemini 3.8 TTS モデルは、音声を選択または作成する 4 つの方法をサポートしています。

  1. 事前構築済みの音声: 30 種類の厳選された音声。
  2. 拡張音声ライブラリ: 言語、地域のアクセント、キャラクター ペルソナにわたる 2,000 以上の厳選されたプリセット音声。
  3. 音声デザイン(プレビュー): Voices API の create メソッド(Google Gen AI SDK の client.voices.create()、または POST https://aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/global/voices)を使用して、自然言語の説明からカスタム音声を作成します。type を VOICE_TYPE_PROMPTED に、store を true に設定します。レスポンスには、保存された voice_... ID と音声のサンプルが返されます。
  4. ボイス レプリケーション(プレビュー): 同じ create メソッドを使用して、参照音声と同意音声から話者の声を複製します。type を VOICE_TYPE_REPLICATED に設定します。store: true を使用すると、レスポンスは保存された voice_... ID を返します。store: false を指定すると、ステートレスな voicekey_... 鍵が返されます。

カスタム音声の上限と TTL

音声タイプ ストレージ モード 管理 有効期限
保存された音声(voice_...、設計または複製) store: true Voices API の list、get、delete メソッド 最後の使用から 1 年後
ボイス レプリケーション キー(voicekey_...) store: false アプリケーションによって管理されます。Google は鍵を保持しません。 作成から 7 日後

保存された音声で音声を生成すると、1 年間の保持期間が再開されるため、定期的に使用する音声の有効期限が切れることはありません。音声作成リクエストには、プロジェクトごと、1 分あたりの割り当てが適用されます。この上限を超えると、create メソッドは RESOURCE_EXHAUSTED エラーを返します。詳細については、割り当てとシステムの上限をご覧ください。

データの保存と保持

Google は、保存された音声の作成時に指定した入力と、それらから派生した音声アーティファクトを、音声を作成したGoogle Cloud プロジェクトに関連付けて保存します。

話者の録音から複製された音声を作成すると、次のものが保存されます。

  • 参照音声: 音声が複製される話者のサンプル。
  • 同意音声: 必要な同意文を読み上げるスピーカー。

プロンプトで音声のテキスト記述を使用してデザインされた音声を作成すると、次のものが保存されます。

  • 音声を説明するために作成したテキスト プロンプト。
  • そのプロンプトから生成された音声。モデルはこれを音声の参照として使用します。

デザインされた音声には同意音声がありません。これは、人の録音ではなく説明から生成されるためです。

音声入力は、モデルの更新後も音声が機能し続けるように保存されます。 基盤となるモデルが更新されると、保存された入力から音声アーティファクトが再生成されます。音声に保存された入力が見つからない場合、そのアーティファクトは再生成できず、モデルの更新後に音声が機能しなくなります。その後、音声を再度作成する必要があります。

保存された入力は、モデルの更新時に音声を再生成するためにのみ使用されます。保存時に暗号化され、音声を作成したプロジェクトに分離されます。

保持期間

音声と関連するすべての保存データは、最後に音声合成に使用してから最長 1 年間(365 日)保持されます。この期間は、音声を作成したときに開始され、その音声を使用する合成リクエストを送信するたびにリセットされます。音声が 365 日間使用されない場合、音声、保存された入力、派生アーティファクトは削除されます。

お客様による削除

音声は、Voices API の delete メソッドを使用していつでも削除できます。音声を削除すると、保存されている入力とその派生アーティファクトが削除されます。音声が属する Google Cloud プロジェクトを削除すると、標準のプロジェクト削除プロセスに従って、音声も削除されます。

事前構築済みの音声

次のリストに、各事前構築済み音声の名前とその特性を示します。

  • Achernar: 優しい
  • アキルド: フレンドリー
  • Algenib: 砂利
  • Algieba: スムーズ
  • Alnilam: 硬い
  • アオエデ: さわやか
  • アウトノエ: 明るい
  • Callirrhoe: おおらか
  • カロン: 説明的
  • デスピナ: 流暢
  • Enceladus: 息を多く含む
  • エリノメ: 明瞭
  • Fenrir: 興奮しやすい
  • Gacrux: 大人っぽい
  • イアペトゥス: 明瞭
  • コレー: 硬い
  • ラオメデイア: 陽気
  • Leda: 若々しい
  • Orus: 企業
  • ケース: Upbeat
  • プルケリマ: 大胆
  • ラスアルゲティ: 説明的
  • サダクビア: 活発
  • サダルタゲル: 博識
  • シェダル: 偶数
  • スラファト: 暖かい
  • Umbriel: のんびり
  • Vindemiatrix: 穏やか
  • Zephyr: 明るい
  • ズベンエルゲヌビ: 気さく

拡張音声ライブラリ

拡張音声ライブラリには、30 種類の事前構築済み音声に加えて、言語、地域アクセント、キャラクターのペルソナ、オーディオブック、会話エージェント、ニュースなどのユースケースにわたる 2,000 種類以上の厳選されたプリセット音声が用意されています。ライブラリ音声を使用するには、ビルド済みの音声名を渡す場合と同じように、speechConfig.voiceConfig.voice で ID を渡します。

ライブラリをブラウジングするには、Voices API の list メソッド(ListVoices)を呼び出します。このメソッドは、プロジェクトに保存されているカスタム音声、事前構築済みの音声、拡張音声ライブラリの音声を返します。各ライブラリ音声には、id と、language_code、accent、gender、pitch、persona、description などのメタデータが含まれています。結果を絞り込むには、次のフィルタを使用します。

  • type: 音声ソース。事前構築済み音声とライブラリ音声の場合は prebuilt、設計された音声の場合は prompted、複製された音声の場合は replicated。複数の値を渡すと、メソッドはそれらのいずれかに一致する音声を返します。
  • search: 各音声の表示名と説明に対して大文字と小文字を区別せずに照合するテキスト。

次の例では、ライブラリでナレーターの音声を検索します。

Python

from google import genai

client = genai.Client(enterprise=True, project="PROJECT_ID", location="global")

response = client.voices.list(type_=["prebuilt"], search="narrator", page_size=50)
for voice in response.voices or []:
    print(voice.id, voice.language_code, voice.gender, voice.description)

REST

curl -G \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  https://aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/global/voices \
  --data-urlencode "type=prebuilt" \
  --data-urlencode "search=narrator" \
  --data-urlencode "pageSize=50"

list メソッドは、1 ページあたり最大 50 個の音声を返します。次のページを取得するには、レスポンスの next_page_token 値を page_token パラメータとして渡します。

音声出力形式

デフォルトの音声エンコードは、メソッドによって異なります。

  • 単項リクエスト(generateContent)は、RIFF ヘッダー(16 ビット PCM、24 kHz、モノラル)を含む完全な WAV ファイル(audio/wav)を返します。
  • ストリーミング リクエスト(streamGenerateContent)は、ヘッダーなしの RAW 16 ビット符号付きリトル エンディアン PCM チャンク(audio/l16)を 24 kHz、モノラルで返します。

別のエンコードをリクエストするには、generationConfig.responseFormat を音声形式に設定します。Gemini 3.8 TTS モデルは、次の mimeType 値をサポートしています。

mimeType 値 形式 説明
AUDIO_WAV (単項デフォルト) WAV(audio/wav) RIFF ヘッダー付きの完全な WAV ファイル(16 ビット PCM、24 kHz、モノラル)。
AUDIO_L16(ストリーミングのデフォルト) リニア PCM(audio/l16) ヘッダーレスの RAW 16 ビット符号付きリトル エンディアン PCM。ストリーミング、カスタム オーディオ パイプライン、マルチターン クリップの連結に使用します。
AUDIO_MULAW μ-law(audio/mulaw) G.711 μ-law 圧縮音声(8 kHz、モノラル)。北米と日本の電話で一般的に使用されています。
AUDIO_ALAW A-law(audio/alaw) G.711 A-law 圧縮音声(8 kHz、モノラル)。ヨーロッパや国際電話で一般的に使用されています。

モデルは sampleRate フィールドを無視します。リニア PCM と WAV の出力は 24 kHz、μ-law と A-law の出力は 8 kHz です。これは、レスポンス mimeType のレートに関係ありません。パイプラインで異なるサンプルレートが必要な場合は、クライアントで出力を再サンプリングします。

次の例では、テレフォニー パイプラインの μ-law 出力をリクエストします。Google Gen AI SDK for Python は GenerateContentConfig で responseFormat を公開しないため、Python サンプルは http_options.extra_body を使用してリクエスト本文で渡します。

Python

from google import genai

client = genai.Client(enterprise=True, project="PROJECT_ID", location="global")

response = client.models.generate_content(
    model="gemini-3.8-flash-tts",
    contents=[{"role": "user", "parts": [{"text": "Have a wonderful day!"}]}],
    config={
        "response_modalities": ["AUDIO"],
        "speech_config": {"voice_config": {"voice": "Kore"}},
        "http_options": {
            "extra_body": {
                "generationConfig": {
                    "responseFormat": [{"audio": {"mimeType": "AUDIO_MULAW"}}]
                }
            }
        },
    },
)

# The response is headerless μ-law audio at 8 kHz, mono.
with open("out.mulaw", "wb") as f:
    f.write(response.candidates[0].content.parts[0].inline_data.data)

REST

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  https://aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/global/publishers/google/models/gemini-3.8-flash-tts:generateContent \
  -d '{
    "contents": [{"role": "user", "parts": [{"text": "Have a wonderful day!"}]}],
    "generationConfig": {
      "responseModalities": ["AUDIO"],
      "responseFormat": [{"audio": {"mimeType": "AUDIO_MULAW"}}],
      "speechConfig": {
        "voiceConfig": {"voice": "Kore"}
      }
    }
  }' | jq -r '.candidates[0].content.parts[0].inlineData.data' | base64 --decode > out.mulaw

サポートされている言語

Gemini 3.8 TTS モデルは、入力言語を自動的に検出します。Gemini 3.8 Flash TTS は 130 言語をサポートし、Gemini 3.8 Flash-Lite TTS は 101 言語をサポートしています。

制限事項

  • TTS モデルはテキストのみの入力を受け入れ、音声のみの出力を返します。
  • マルチスピーカー リクエストには、ちょうど 2 つのスピーカーが必要です。複数のキャラクターの会話で、設計された音声(voice_...)または複製された音声(voice_... または voicekey_...)を組み合わせる場合や、3 人以上の話者を使用する場合は、各話者の発言を個別に合成して音声を連結します。各ターンで AUDIO_L16 出力をリクエストするか、クリップを連結する前に各クリップから WAV ヘッダーを削除します。
  • モデルは、global、us、eu のロケーションで使用できます。
  • ユーザー所有のカスタム音声(音声デザインまたは音声レプリケーションで作成された音声)は、global ロケーションでのみ使用できます。
  • システム指示はサポートされていません。
  • 出力サンプルレートを設定することはできません。MP3 と Ogg Opus の出力はサポートされていません。

次のステップ