コードを書かないAIエンジニア@もるふぉです。
シニアソフトウェアエンジニアとして10年以上コードを書いてきましたが、今はAI駆動開発で「コードを書かない」スタイルに振り切っています。
TTSを触るとき、いつも思うんですよね——「感情が乗らない」って。
落ち着いて読んでほしいのに棒読み、盛り上げてほしい場面でも同じトーン。
SSMLの タグで制御しようとしたら、今度はXMLを書くのが面倒になる。
そのループ、ずっとあったと思います。
Gemini 3.1 Flash TTS が、それを変えるかもしれません。
2026年4月15日にGoogleが発表したこのモデルには「Audio Tags」という仕組みが搭載されています。
[whispers] や [excited] といったタグをテキストに差し込むだけで、日本語を含む70以上の言語で音声の感情やトーンを制御できます。
正直、これを触った瞬間「SSMLの時代、終わったな」と思いました。
この記事では、Audio Tagsの仕組みからPython実装、日本語での使い方、競合TTSとの比較まで、シニアエンジニアが押さえるべきポイントを一通りまとめます。
Gemini 3.1 Flash TTS — 前モデルから何が変わったか
前バージョン(Gemini 2.5 Flash TTS)との差分
Gemini 2.5 Flash/Pro TTSは、プロンプトに「cheerfullyに読んで」「sadな感じで」と自然言語で指示する方式でした。
悪くはなかったんですが、「テキストのこの部分だけトーンを変えたい」というピンポイントの制御が難しかった。
「全体はニュートラルで、この1文だけ囁くように読んでほしい」——そういう細かい要求に応えるには、かなり試行錯誤が必要でした。
Gemini 3.1 Flash TTSの最大の変化は、Audio Tagsによるインライン制御が可能になったことです。
テキストの任意の位置に [whispers] や [excited] といったタグを埋め込めるようになり、1文の中でもトーンを切り替えられます。
さらに、プロンプティングフレームワークが5要素(Audio Profile / Scene / Director's Notes / Sample Context / Transcript)に体系化され、音声の「演出」がより構造的にできるようになりました。
Gemini 3.1 Flash TTS のリリース概要(2026年4月15日)
主なスペックをまとめます。
gemini-3.1-flash-tts-previewArtificial AnalysisのTTSリーダーボードでは、Inworld TTS 1.5 Max(Elo 1,215)に次ぐ2位にランクインしています。
Eloスコア1,211で品質はトップクラス、かつ無料枠あり。
「高品質かつ低コスト」のポジションに位置していて、コスパという点ではかなり強いですね。
では、その核心である「Audio Tags」が具体的に何を変えるのか——次のセクションで見ていきます。
Audio Tags とはなにか — テキストに声の演技を埋め込む新概念
SSML タグとの違い
ここ、ちょっと注目してください。
従来のGoogle Cloud TTSでは、音声を制御するためにSSML(Speech Synthesis Markup Language)を書く必要がありました。
<speak>
<prosody rate="slow" pitch="-2st">
<emphasis level="strong">重要なお知らせです。</emphasis>
</prosody>
<break time="500ms"/>
今日はいい天気ですね。
</speak>XMLベースで、率直に言ってめんどくさい。
タグをネストして、属性を調べて、試して、また調べて——「音声を制御したいだけなのに、なぜXMLと格闘しているんだ」という気持ち、わかりますよね。
Audio Tagsはこれを根本から変えます。
[whispers] 重要なお知らせです。[normal] 今日はいい天気ですね。これだけです。
「え、本当にこれだけ?」って思いますよね。
本当にこれだけです。
エンジニア的に言えば、SSMLが「インラインスタイル」だとすると、Audio Tagsは「CSSクラス」に近い発想です。
タグ名で意図を宣言するだけで、あとはモデルが適切な音声パラメータ(ピッチ、速度、声質の変化)を自動で決めてくれます。
つまり、「どうやって囁かせるか」ではなく「囁かせたい」と書くだけでいい。
この違いは、使ってみると体感レベルでわかります。
Gemini TTS Audio Tags の主要タグ一覧
公式ドキュメントで確認できるタグを分類すると、以下のようになります。
アクション系(声の物理的な動き)
[whispers][shouting][laughs][sighs][gasp][giggles][cough][crying]感情系(声のトーン変化)
[excited][sarcastic][serious][tired][curious][amazed][panicked][trembling][mischievously]さらに、感情修飾語として anger, joy, sadness, fear, confidence, compassion, gratitude なども使えます。
これらはタグというより、Director's Notes(後述)と組み合わせてプロンプト内で使う形になります。
Audio Tags の配置ルールと制約
Audio Tagsを使う上で知っておくべきルールがあります。
タグの効果範囲: タグは配置した位置から次のタグが現れるまで、または文末まで効果が続きます。
CSSのクラスと同じで、「上書き」の概念です。
[excited] 新機能が出ました![serious] ただし、いくつか注意点があります。この場合、前半は興奮したトーン、後半は真剣なトーンで読み上げられます。
1行のテキストの中でトーンをスイッチできる——これが従来のSSMLとの決定的な違いです。
タグの書式: 角括弧 [] で囲み、タグ名は英語で指定します(日本語テキストに対しても英語タグを使います)。
これは日本語ユーザーにとって重要なポイントなので、後のセクションで詳しく解説します。
Audio Tagsの基本はわかりました。
次は、これをさらに上位から制御する「Director's Notes」の仕組みを見ていきます。
Gemini 3.1 Flash TTS の Audio Tags を演出する — Director's Notes 3層制御モデル
Audio Tagsはインラインの制御ですが、Gemini 3.1 Flash TTSにはもっと上位の制御レイヤーがあります。
「この1文だけ囁く」がAudio Tags、「全体を落ち着いたポッドキャスト調にしてほしい」がDirector's Notesのイメージです。
映画で言えば、Audio Tagsが「演者への細かい演技指示」で、Director's Notesが「監督の全体方針」に相当します。
公式が「Prompting Framework」として体系化した5要素のうち、特に重要な3つを紹介します。
Audio Profile: キャラクターのペルソナ設定
読み上げる「人物」のキャラクター設定です。
You are Yuki, a 30-year-old Japanese tech podcaster.
You speak with calm confidence and occasional humor.
Your voice is warm but professional.名前、年齢、職業、性格まで指定できます。
マルチスピーカーモードで使うと、2人のキャラクターにそれぞれ別の人格を与えられます。
Scene: 環境・雰囲気の指定
「どこで」「どんな状況で」話しているかのコンテキストです。
Scene: A quiet podcast studio, late at night.
The host is wrapping up a deep-dive episode on AI speech synthesis.
The mood is reflective and slightly excited about the technology.映画の台本における「ト書き」に相当しますね。
この情報をモデルに与えることで、声のトーンや間の取り方が自然に変わります。
「深夜のスタジオ」と「昼間のラジオ収録」では、同じテキストでも声のトーンが違って当然。
それをモデルが文脈から読み取ってくれます。
Director's Notes: スタイル・ペース・アクセントの調整
3つの中で最も実用的な制御レイヤーです。
Director's Notes:
- Style: Conversational, like explaining to a friend
- Pacing: Medium speed, slow down at key technical terms
- Accent: Standard Japanese
- Emphasis: Stress the word "Audio Tags" every time it appearsStyle(トーン・感情)、Pacing(速度・リズム)、Accent(地域性)の3軸で指示します。
Audio Tagsが「この単語をこう読め」というミクロ制御だとすると、Director's Notesは「全体のトーンをこうしてくれ」というマクロ制御です。
両方を組み合わせることで、かなり細かい音声演出が可能になります。
これをPythonでどう実装するかを、次のセクションで見ていきます。
Python で Gemini 3.1 Flash TTS を実装する
環境準備と API キー設定
まず、Google Gen AI SDKをインストールします。
pip install google-genaiAPIキーはGoogle AI Studioで取得できます。
環境変数に設定しておきましょう。
export GOOGLE_API_KEY="your-api-key-here"コマンド2本で準備完了です。
シングルスピーカー + Audio Tags の Python コード例
Audio Tagsを使ったシングルスピーカーの基本的な実装です。
import wave
import struct
from google import genai
from google.genai import types
client = genai.Client()
# Audio Tagsを含む日本語テキスト
text = """
[excited] みなさん、こんにちは!
[serious] 今日は大事なお知らせがあります。
[whispers] 実は、新しいプロジェクトが始まります。
[laughs] 楽しみですね!
"""
response = client.models.generate_content(
model="gemini-3.1-flash-tts-preview",
contents=text,
config=types.GenerateContentConfig(
response_modalities=["AUDIO"],
speech_config=types.SpeechConfig(
voice_config=types.VoiceConfig(
prebuilt_voice_config=types.PrebuiltVoiceConfig(
voice_name='Kore',
)
)
),
),
)
# 音声データをWAVファイルとして保存
data = response.candidates[0].content.parts[0].inline_data.data
with wave.open("output.wav", "wb") as wf:
wf.setnchannels(1)
wf.setsampwidth(2) # 16bit = 2bytes
wf.setframerate(24000)
wf.writeframes(data)
print("output.wav に保存しました")ポイントは response_modalities=["AUDIO"] の指定です。
これがないとテキスト応答が返ってきてしまいます。
音声はPCM 16bit / 24kHz / モノラルで返されるので、WAVファイルへの変換は上記のように wave モジュールで簡単にできます。
これだけで、感情付きの日本語音声ファイルが手元に残ります。
マルチスピーカー(最大2名)の Python コード例
Gemini 3.1 Flash TTSでは、最大2名のスピーカーによる会話形式の音声生成に対応しています。
from google import genai
from google.genai import types
client = genai.Client()
response = client.models.generate_content(
model="gemini-3.1-flash-tts-preview",
contents="""
TTS the following conversation between Hana and Kenji:
Hana: [excited] 新しいTTSモデル、もう試した?
Kenji: [curious] いや、まだ。そんなにいいの?
Hana: [whispers] Audio Tagsっていう機能があってね…
Kenji: [amazed] え、何それ。
Hana: [laughs] でしょ?テキストにタグを埋めるだけで感情が変わるの。
""",
config=types.GenerateContentConfig(
response_modalities=["AUDIO"],
speech_config=types.SpeechConfig(
multi_speaker_voice_config=types.MultiSpeakerVoiceConfig(
speaker_voice_configs=[
types.SpeakerVoiceConfig(
speaker="Hana",
voice_config=types.VoiceConfig(
prebuilt_voice_config=types.PrebuiltVoiceConfig(
voice_name='Aoede',
)
),
),
types.SpeakerVoiceConfig(
speaker="Kenji",
voice_config=types.VoiceConfig(
prebuilt_voice_config=types.PrebuiltVoiceConfig(
voice_name='Charon',
)
),
),
]
)
),
),
)重要なのは、speaker パラメータの値がプロンプト内のスピーカー名(Hana:, Kenji:)と一致している必要があるという点です。
ここがズレると、ボイスの割り当てがおかしくなります。
スピーカー名の一致だけ気をつければ、あとはほぼコピペで動きます。
30ボイスの選び方
利用可能な30ボイスの一覧です。
Zephyr, Puck, Charon, Kore, Fenrir, Leda, Orus, Aoede, Callirrhoe, Autonoe, Enceladus, Iapetus, Umbriel, Algieba, Despina, Erinome, Algenib, Rasalgethi, Laomedeia, Achernar, Alnilam, Schedar, Gacrux, Pulcherrima, Achird, Zubenelgenubi, Vindemiatrix, Sadachbia, Sadaltager, Sulafat
全部ギリシャ神話や天文学由来の名前で、名前だけだとどんな声かわかりません。
実際に試すしかないんですが、日本語テキストで試した感覚だと、以下の傾向があります。
- Kore: 落ち着いた女性的な声。ナレーション向き。
- Charon: 低めの男性的な声。ニュース読み上げ向き。
- Aoede: 明るい女性的な声。ポッドキャスト向き。
- Puck: やや高めで軽快な声。カジュアルなコンテンツ向き。
Google AI Studioのプレイグラウンドで試聴できるので、用途に合わせて選ぶのがおすすめです。
実装の全体像がつかめたと思います。
次は「日本語でどう使うか」という実践的なポイントに絞って解説します。
日本語で Gemini TTS の Audio Tags を使う実践ガイド
70言語以上対応の実態
Gemini 3.1 Flash TTSは70以上の言語に対応しており、日本語(ja)はその中に含まれています。
言語は自動検出されるため、日本語テキストを渡せば日本語として読み上げてくれます。
言語コードを明示的に指定する必要はありません。
ただし、30種類のボイスはすべて英語ネイティブベースで設計されています。
日本語テキストを渡すとモデルが日本語の発音に適応してくれますが、ネイティブの日本語話者と完全に同じ自然さかというと、正直に言って「かなり近いが完璧ではない」という段階です。
それでも、2025年時点のTTSと比べると格段に進化していて、実用レベルには十分達しています。
日本語テキスト + 英語 Audio Tags のベストプラクティス
日本語でAudio Tagsを使うときの最も重要なポイントは、タグは英語で、テキストは日本語で書くということです。
[excited] 新しいAIモデルがリリースされました!
[whispers] 実は、まだプレビュー版なんですけどね。
[serious] それでは、詳しい使い方を解説していきます。タグ部分は [excited] のように英語で指定し、読み上げるテキストは日本語で書きます。
モデルは賢いので、日本語テキスト中に英語タグが混在していても問題なく処理してくれます。
Gemini 2.5 TTS を検証した複数のエンジニアブログでも、プロンプト全体を英語で書いたほうが感情制御の精度が高い傾向が報告されています。
そのため、Director's NotesやScene設定は英語で書き、Transcript(実際に読み上げるテキスト)だけを日本語にする構成がベストプラクティスです。
日本語ナレーション + Audio Tags の実践例
以下は、日本語ポッドキャストのオープニングを想定したプロンプト例です。
Audio Profile:
You are Hana, a friendly Japanese tech blogger in her late 20s.
Scene:
Recording a casual podcast episode about the latest AI news.
The studio is quiet and the mood is upbeat.
Director's Notes:
- Style: Warm and conversational, like chatting with a friend
- Pacing: Natural Japanese rhythm, slightly energetic
- Emphasis: Stress new product names
Transcript:
[excited] みなさん、こんにちは!テックニュースの時間です。
[serious] 今日は、Googleから発表された新しい音声合成AIについてお話しします。
[whispers] 正直、これはかなりすごいです。
[laughs] あ、ネタバレしちゃいましたね。
[normal] それでは、詳しく見ていきましょう。Audio Profile / Scene / Director's Notes を英語で書き、Transcriptの日本語テキストにAudio Tagsを埋め込む。
この構成が、日本語で最も安定した結果を得られるパターンです。
コピペして日本語テキストだけ書き換えれば、すぐに使えます。
競合のTTSと比べて、このアプローチがどこまで通用するのか——次のセクションで比較します。
競合 TTS との比較 — ElevenLabs・OpenAI との立ち位置
Artificial Analysis リーダーボード(Elo スコア 1,211)での位置
Artificial Analysisの TTS リーダーボードにおける上位5モデルは以下の通りです(2026年4月時点)。
Gemini 3.1 Flash TTSは2位で、ElevenLabsの最新モデル(Eleven v3)を上回っています。
スコア差4点というのはほぼ誤差の範囲ですが、Eloスコアが示す「体感品質」という点では、ElevenLabsと肩を並べるレベルになったということです。
しかもGeminiは「高品質 + 低コスト」のポジションに位置しており、コストパフォーマンスの面では頭ひとつ抜けていますね。
Gemini TTS の料金比較 — ElevenLabs・OpenAI TTS
2026年4月時点の料金を比較します。
Gemini 3.1 Flash TTSには無料枠があるのが大きいポイントです。
プロトタイプ開発や検証フェーズでは無料で使い倒せます。
「試すだけならタダ」というのは、正直かなりありがたい。
本格運用で大量の音声を生成する場合は、音声出力のトークン単価(25トークン/秒の音声)を計算する必要がありますが、ElevenLabsの文字単価と比較すると概ね安い傾向にあります。
Gemini TTS の向き不向き — ユースケース整理
Gemini 3.1 Flash TTSが向いている場面
- Audio Tagsによる感情制御が必要なナレーション・ポッドキャスト
- 日本語を含む多言語対応が必要なサービス
- コストを抑えたいプロトタイプ開発
- Google Cloud / Vertex AIエコシステムとの統合
ElevenLabsが向いている場面
- カスタムボイスクローンが必要な場合
- ストリーミング出力が必須のリアルタイム用途
- 音声クオリティが最優先で、コストは二の次という場合
OpenAI TTSが向いている場面
- すでにOpenAI APIを使っているプロジェクトへの統合
- gpt-4o-mini-ttsで「AIが考えながら喋る」用途
- シンプルなテキスト読み上げだけでよい場合
用途に合わせて使い分けるのが正しい判断ですが、「まず試す」という段階では、無料のGeminiから始めるのが合理的です。
ただし、Geminiを選ぶ前に知っておくべき制約があります。
Gemini 3.1 Flash TTS の制約と注意事項 — ストリーミング未対応ほか
ストリーミング未対応(2026年4月時点)
これが現時点で最大の制約です。
Gemini 3.1 Flash TTSはストリーミング出力に対応していません。
テキストを送信して、すべての音声が生成されてからレスポンスが返ってきます。
つまり、リアルタイムの会話UIや、ユーザーの入力に即座に応答する音声チャットボットには使えません。
ElevenLabsやOpenAIのTTSはストリーミング対応なので、リアルタイム性が重要な用途ではそちらを選ぶ必要があります。
現時点では公式にストリーミング対応のロードマップは発表されていません。2026年4月時点では未対応という前提で設計する必要があります。
32k トークンのコンテキスト上限
入力テキストの上限は32kトークンです。
日本語の場合、1文字あたり約1〜3トークンを消費するので、おおよそ1万〜3万文字程度が上限になります。
短い記事の読み上げや、ポッドキャストの1セクションくらいなら問題ありませんが、書籍1冊分をまとめて変換するような使い方はできません。
長いテキストを処理する場合は、分割して複数回APIを呼び出し、後から音声を結合する実装が必要になります。
SynthID 透かしの影響と業務利用時の考慮点
Gemini 3.1 Flash TTSで生成されるすべての音声には、SynthIDという不可聴の電子透かしが埋め込まれます。
これはAI生成コンテンツの検出を可能にするGoogleの安全性機能です。
業務利用で押さえておくべきポイントは以下の通りです。
- 透かしは人間の耳には聞こえません。音声品質には影響しません。
- 検出ツールを使えばAI生成であることが判明します。
- コンテンツポリシーで「AI生成音声であることの開示」が求められる場面では、これは逆にメリットになります。
- AI生成であることを隠したい用途(ナレーション録音の代替など)では、クライアントとの合意が必要です。
また、まれにテキストトークンが音声の代わりに返される場合があります。
プロダクションコードでは、レスポンスの形式をチェックしてリトライするロジックを入れておくのが安全です。
まとめ — Gemini TTS の Audio Tags が変えること
Gemini 3.1 Flash TTSの Audio Tags は、音声合成の「制御方法」を根本から変えるアップデートだと思います。
- SSMLのXML地獄から解放される
[whispers][excited]をテキストに差し込むだけで感情制御ができる- Director's Notes / Scene / Audio Profile で映画監督のように演出できる
- 日本語テキスト + 英語タグの構成でしっかり動く
- 70以上の言語、30ボイスに対応
- 無料枠あり、Elo スコア1,211で品質もトップクラス
一方で、ストリーミング未対応や32kトークン上限といった制約もあります。
リアルタイム音声チャットには向きませんが、ナレーション、ポッドキャスト、動画のナレーション生成、多言語コンテンツ制作といった「事前生成型」の用途では、現時点で最もコスパの良い選択肢のひとつです。
まだプレビュー版なので、Google AI Studioで無料で試せます。
コード不要のプレイグラウンドで [whispers] [excited] を貼り付けて、日本語テキストがどう変わるか試すだけなら5分もかかりません。
ぜひ自分の耳で確かめてみてください。




💬 コメント
ログイン か 会員登録 するとコメントできます