言語と音声を構成する

このドキュメントでは、Gemini Live API で合成音声レスポンスと音声検出を構成する方法について説明します。さまざまな HD 音声と言語でレスポンスを構成できます。また、音声アクティビティ検出設定を構成してユーザーがモデルを中断できるようにすることもできます。

言語と音声を設定する

gemini-3.8-live などのライブ音声モデルは、会話中に言語を自然に切り替えることができます。システム指示で言語を指定して、話す言語を制限することもできます。

音声は、すべてのモデルの voice_name フィールドで構成されています。

次のコードサンプルは、言語と音声を構成する方法を示しています。

from google.genai.types import LiveConnectConfig, SpeechConfig, VoiceConfig, PrebuiltVoiceConfig

config = LiveConnectConfig(
  response_modalities=["AUDIO"],
  speech_config=SpeechConfig(
    voice_config=VoiceConfig(
        prebuilt_voice_config=PrebuiltVoiceConfig(
            voice_name=voice_name,
        )
    ),
    language_code="en-US",
  ),
)

音声のトーンとアクセントをガイドする

システム指示を使用して音声のトーンとアクセントを指定すると、Gemini Live API は指定した音声で応答します。たとえば、「フランス語のアクセントで明るく前向きな英語」などとします。

サポートされている音声

Gemini Live API は、voice_name フィールドで次の 30 種類の音声オプションをサポートしています。

Zephyr -- 明るい
Kore -- しっかりした
Orus -- しっかりした
Autonoe -- 明るい
Umbriel -- 気さくな
Erinome -- 明瞭な
Laomedeia -- 陽気な
Schedar -- 落ち着いた
Achird -- 友好的な
Sadachbia -- 活発な
Puck -- 陽気な
Fenrir -- 興奮しやすい
Aoede -- さわやかな
Enceladus -- かすれた
Algieba -- なめらかな
Algenib -- ガラガラ声の
Achernar -- やわらかい
Gacrux -- 成熟した
Zubenelgenubi -- ざっくばらんな
Sadaltager -- 聡明な
Charon - 情報豊富な
Leda - 若々しい
Callirrhoe - 気さくな
Iapetus - 明瞭な
Despina - なめらかな
Rasalgethi - 情報豊富な
Alnilam - しっかりした
Pulcherrima - 積極的な
Vindemiatrix - 優しい
Sulafat - 温かい

サポートされている言語

Gemini Live API は次の言語をサポートしています。

言語 BCP-47 コード
アラビア語(エジプト) ar-EG
ベンガル語(バングラデシュ) bn-BD
オランダ語(オランダ) nl-NL
英語(インド) en-IN と hi-IN のバンドル
英語(アメリカ) en-US
フランス語(フランス) fr-FR
ドイツ語(ドイツ) de-DE
ヒンディー語(インド) hi-IN
インドネシア語(インドネシア) id-ID
イタリア語(イタリア) it-IT
日本語(日本) ja-JP
韓国語(韓国) ko-KR
マラーティー語(インド) mr-IN
ポーランド語(ポーランド) pl-PL
ポルトガル語(ブラジル) pt-BR
ルーマニア語(ルーマニア) ro-RO
ロシア語(ロシア) ru-RU
スペイン語(アメリカ) es-US
タミル語(インド) ta-IN
テルグ語(インド) te-IN
タイ語(タイ) th-TH
トルコ語(トルコ) tr-TR
ウクライナ語(ウクライナ) uk-UA
ベトナム語(ベトナム) vi-VN

カスタム音声を使用する

Gemini Live API が合成音声レスポンスで複製する音声の短い録音を提供できます。カスタム音声は、voice_config の replicated_voice_config フィールドでセッションごとに構成されます。事前にアップロードしたりトレーニングしたりする必要はありません。

音声サンプルの要件

音声サンプルは、次の仕様を満たしている必要があります。

  • 音声形式: 可変サンプルレートの PCM 音声 s16le(例: audio/pcm;rate=24000)

  • 時間: 10 ~ 20 秒。

カスタム音声を録音する

音声サンプルを録音する際は、次のヒントを参考にすると、最高の音質で録音できます。

  1. 自然な話し方をする: アバターを放送局のアナウンサーのようにしたい場合を除き、「ラジオの声」や過剰な発音は避けてください。友人に話しかけるように、スクリプトを正確に読み上げます。

  2. バックグラウンド ノイズを制限する: バックグラウンド ノイズを可能な限り制限します。ファンをオフにし、エアコンをオフにし、開いている窓を閉じます。

  3. 少し微笑む: 録音中に微笑むと、録音に温かみが加わり、その温かみが複製された音声に追加される傾向があります。

カスタム音声の録音には、次のいずれかのスクリプトを使用することをおすすめします。

  • 音声標準、全体的な品質に最適: 「太陽の光が大気中の雨粒に当たると、雨粒がプリズムの役割を果たして虹を形成します。虹は、白色光をいくつもの美しい色に分割したものなのです。これらの色が形作る長く丸いアーチは、空高く道を描き、その 2 つのたもとは水平線のはるか向こうへと続いています。」

  • ストーリーテラー(感情とダイナミック レンジのキャプチャに最適): 「ほこりまみれの古い本を開いたとき、私は目を疑いました。小さな金色の鍵が木製の床に落ちた。「これはどこから来たの?」私は突然の興奮に身を震わせながら、心の中でつぶやいた。すべてが変わろうとしていた。」

カスタム音声を設定する

WebSocket 接続で送信する最初の setup ペイロードでカスタム音声を設定します。

import base64
import json
import websockets

# Load custom voice audio (PCM s16le, e.g., 24kHz)
with open("/path/to/your/audio_sample.wav", "rb") as f:
    wav_b64 = base64.b64encode(f.read()).decode("utf-8")

# Setup generation config with custom voice
GENERATION_CONFIG = {
    "response_modalities": ["AUDIO"],
    "speech_config": {
        "voice_config": {
            "replicated_voice_config": {
                "voice_sample_audio": "VOICE_SAMPLE",
                "mime_type": "VOICE_MIME_TYPEaudio/pcm;rate=24000",
            }
        }
    },
}

# Session setup message
SETUP_MESSAGE = {
    "setup": {
        "model": "gemini-3.8-live",
        "generation_config": GENERATION_CONFIG,
        "system_instruction": {
            "parts": [{"text": "Your system instruction here"}]
        },
        "input_audio_transcription": {},
        "output_audio_transcription": {},
    }
}

次のように置き換えます。

  • VOICE_SAMPLE: Base64 でエンコードされた PCM 音声文字列(10 ~ 20 秒のサンプル)。

  • VOICE_MIME_TYPE: PCM 音声の MIME タイプ("audio/pcm;rate=24000" など)。

カスタム音声は、事前構築済みアバターまたはカスタム アバターとペア設定できます。詳細については、ライブ アバターを構成するをご覧ください。

音声アクティビティ検出を構成する

音声アクティビティ検出(VAD)により、モデルは人が話しているときを認識できます。これは、ユーザーがいつでもモデルを中断できるようにするため、自然な会話を作成するうえで不可欠です。

VAD が中断を検出すると、進行中の生成はキャンセルされ、破棄されます。クライアントにすでに送信された情報だけがセッション履歴に保持されます。その後、サーバーは中断を報告する BidiGenerateContentServerContent メッセージを送信します。さらに、サーバーは保留中の関数呼び出しを破棄し、キャンセルされた呼び出しの ID を記載した BidiGenerateContentServerContent メッセージを送信します。

Python

config = {
    "response_modalities": ["audio"],
    "realtime_input_config": {
        "automatic_activity_detection": {
            "disabled": False, # default
            "start_of_speech_sensitivity": "low",
            "end_of_speech_sensitivity": "low",
            "prefix_padding_ms": 20,
            "silence_duration_ms": 100,
        }
    }
}
      

次のステップ