このページでは、Gemini 3.8 Flash TTS と Gemini 3.8 Flash-Lite TTS を使用する際のプロンプトの作成に関するベスト プラクティスについて説明します。
リクエスト構文とコードサンプルについては、Gemini TTS の概要をご覧ください。
Gemini 3.8 TTS モデルは、text フィールドを逐語的な文字起こしとして扱います。持続的なターンレベルの方向は speech_metadata に入り、特定の時点の発話イベントは文字起こしにインラインで入ります。次のリクエストは、ターンレベルの style とインラインの音声タグおよび一時停止を組み合わせたものです。
{
"contents": [{
"role": "user",
"parts": [{
"text": "Wait... <short pause> did you hear that? <gasp> Someone's at the door.",
"speechMetadata": {"style": "whispered, nervous"}
}]
}],
"generationConfig": {
"responseModalities": ["AUDIO"],
"speechConfig": {"voiceConfig": {"voice": "Kore"}}
}
}
スタイル フィールドとインライン タグ
パフォーマンスに関する指示をスコープごとに分割します。
- ターンレベルの配信(
speech_metadata.style): 感情、韻律、全体的なペース、配信スタイル("whispering"、"out of breath"、"muttering"、"sarcastic"など)などの持続的な配信属性をspeech_metadataのstyleフィールドに入れます。ターン全体で安定したキャラクターとパフォーマンスを作成するには、音声デザインでペルソナを事前に設計し、styleはターンレベルのオプションの調整にのみ使用します。 - ポイントインタイム イベント(インライン タグ): 一瞬の音声以外の発声、呼吸、一時停止を、山かっこ(
<cough>、<breath>、<sigh>、<short pause>)を使用して文字起こしの中にインラインで挿入します。最高の音質を実現するには、山かっこ(<...>)を使用し、音声以外の効果音ではなく、人間の発声にこだわります。
| 範囲 | 設置場所 | 例 |
|---|---|---|
| ターンレベル(ターン全体で維持される) | speech_metadata.style |
"angry tone"、"speaking rapidly"、"out of breath"、"whispers"、"sarcastic" |
| ポイントインタイム(特定の単語で発生) | text(<...>)でインライン |
"<cough> Thank you all for coming tonight! <throat-clearing> As I was saying..." |
ペースと一時停止
リズムと無音は、次の 3 つのレベルで制御できます。
- 句読点と省略記号: カンマ、ダッシュ(
--)、省略記号(...)を使用して、自然なためらいを表現します。 - インライン一時停止タグ: 話者が一時停止する場所に
<short pause>または<long pause>を挿入します。例:"Hold on, let me think... <short pause> Alright, I've got it." - ターンレベルのペース:
speech_metadataで"style": "speaking rapidly"または"style": "speaking slowly"を設定して、ターン全体の会話速度を制御します。
プロソディとピッチ
speech_metadata.style を使用して、ターン全体でプロソディ、ピッチ、イントネーションを制御します。たとえば、"style": "high pitch, cheerful and excited inflection" や "style": "monotone and flat" です。会話の途中で感情が変化する場合は、スクリプトを別々のターンに分割し、それぞれに独自の style を設定します。
強調
文字起こし内の単語を、句読点やインライン タグとともに大文字にして強調します。たとえば、"This is a VERY important point!" や、"It was a VERY long day <sigh> ... nobody listens anymore." です。
発声と会話以外の音声
音声以外の人の発声は、音が鳴るべき位置に山かっこ(<...>)でインラインで配置します。拍手などの音声以外の効果音ではなく、人間の発声を使用します。推奨される音声タグは次のとおりです。
| タグ | タグ | タグ | タグ |
|---|---|---|---|
<argh> |
<breath> |
<heavy breath> |
<exhales> |
<cackle> |
<cheer> |
<chuckle>/<chuckles> |
<cough> |
<cry> |
<gasp> |
<giggle> |
<groan> |
<growl> |
<grunt> |
<grr> |
<hiss> |
<laugh>/<laughter> |
<moan> |
<pant> |
<pff>/<phew> |
<scream> |
<shout> |
<shriek> |
<sigh>/<sighs> |
<sneeze> |
<snicker> |
<snort> |
<sob> |
<throat-clearing> |
<tsk> |
<whimper> |
<whispers>/<whispering> |
<yawn> |
<short pause> |
<long pause> |
バックチャネルと音声の重複
複数話者の会話では、アクティブな話者のターンの内側で、リスナーの反応をパイプ文字(|reaction|)で囲みます。これにより、反応ごとに個別のターンがなくても、自然なバックチャネルや重複する発話が作成されます。
- 短いバックチャネル: アクティブな発言者のターンの中に、リスナーの短い反応を重ねます。
- ターン 1(発言者 A):
"So the launch is Thursday |oh hmm| Are we actually ready?" - ターン 2(話者 B):
"Ready enough |oh really?| The last blocker cleared this morning." - ターン 3(話し手 A):
"Then let's ship it |absolutely| and watch the dashboards."
- ターン 1(発言者 A):
- 重複する音声とインターリーブされた音声: 複数のパイプ セグメントを使用して、同時発話をシミュレートします。これは
gemini-3.8-flash-ttsで最適に動作します。- カウントダウンまたはコーラス:
"Let's surprise him on three |ok| ready?"の後に"one. two. three. |happy| happy |birthday| birthday!" - 完全なオーバーラップ:
"Hello |oh| there |my| it |goodness| must |gracious| be |would| almost |you| time |look| for |at that| dinner"
- カウントダウンまたはコーラス:
世代間の整合性と避けるべきこと
発話者 ID をターン間で安定させるには、次のガイドラインに沿って操作します。
- 長いスタイル ブロックではなく、音声設計でペルソナを事前に設計する: 以前のモデルから引き継がれた長い形式の
"Audio Profile"段落と複数の箇条書き"Director's Notes"は、音声のずれの最も一般的な原因です。音声設計で同じクリエイティブな直感を使用して、永続的なカスタムvoice_...ペルソナを生成し、その音声 ID を TTS 呼び出しに渡します。 - 安定性のために音声リファレンスに依存する(メタ指示を省略): Gemini 3.8 TTS モデルは、最初に音声リファレンスにアンカーするようにトレーニングされています。モデルに音声を安定させるよう指示する手順(
"do not switch speaker identity"や"maintain identical timbre"など)を含めないでください。プロンプト テキストを追加すると、ドリフトが増加します。不要なスタイルの指示を削除し、音声リファレンスで指定された安定点付近でモデルが自然に変化するようにします。 styleで不変の発話者の特徴を変更しようとしない: 年齢、性別、名前、永続的なアクセントの変更をspeech_metadata.styleに入れないでください。代わりに、拡張音声ライブラリから地域音声を選択するか、音声デザインで作成します。
推奨ワークフロー
- キャラクターを一度作成する: 音声デザインでキャラクターを作成するか、ターゲット言語とペルソナに一致する地域音声を選択します。拡張音声ライブラリ
- 自然な話し言葉の文字起こしを不流暢さを含めて記述する: 自然さを最大限に高めるには、
textを実際の話し言葉の文字起こしとして記述します。会話の不流暢さやためらい("Oh uh yeah I think... hm, so that's interesting"など)も記述します。 - まずプレーン TTS をテストする: まず、空の
styleフィールドを使用して文字起こしを合成します。ほとんどのリクエストでは、style指示はまったく必要ありません。 - 調整のみに短い
styleプロンプトを追加する: 特定の配信調整が必要なターンにのみ、簡潔なstyle文字列("casual, friendly"や"muttering, then reassuring"など)を追加し、一貫したベースラインが必要な場合は、その短い文字列を複数のターンで再利用します。
マルチターンの対話と音声エージェント
会話型音声エージェントやその他のマルチターンのアプリケーションを構築する場合:
- LLM テキストが届いたら、ターンごとに 1 つの TTS リクエストを行います。
- 構成された
voiceが、ターンをまたいで話者の ID を保持できるようにします。長いペルソナの説明を毎回再送信しないでください。 styleを空のままにするか、会話全体に対して 1 つの短い定数文字列を送信します。styleプロンプトを強化するのではなく、エージェントの長い回答を短いターンに分割します。