Gemini Text-to-Speech
Google Gemini TTSを使用して、テキストから自然で表現豊かな音声を生成します。70以上の言語、30のプリビルド音声、自然言語プロンプトとオーディオタグによるスタイル制御をサポート。
必要条件: Node.js 18以上、ffmpeg、
@google/genainpmパッケージ、GEMINI_API_KEY環境変数。
利用可能なスクリプト
scripts/generate-tts.mjs— 単一リクエストでの一貫性、無音ベースの分割、自動トリミングを備えたオールインワンTTSジェネレーター。
クイックスタート
単一テキストの音声合成
npm install @google/genai
GEMINI_API_KEY=your-key node scripts/generate-tts.mjs \
--text "こんにちは、私たちの製品へようこそ!" \
--output-dir public/vo \
--voice Kore
マルチセグメント音声オーバー(一貫した音声)
segments.json を作成します:
[
{ "id": "intro", "text": "製品発表へようこそ。" },
{ "id": "features", "text": "これがあなたが気に入る3つの機能です。" },
{ "id": "close", "text": "今すぐ私たちのウェブサイトで始めましょう。" }
]
実行:
GEMINI_API_KEY=your-key node scripts/generate-tts.mjs \
--segments segments.json \
--output-dir public/vo \
--voice Kore \
--director-notes "トーン: 温かく、自信に満ち、感動的。スタイル: 音声に笑みを含んだプロフェッショナルなナレーター。アクセント: 中立的なアメリカ英語。ペース: 中庸。"
出力(JSONが標準出力に):
{
"success": true,
"segments": [
{ "id": "intro", "file": "public/vo/vo-intro.mp3", "duration": 3.25 },
{ "id": "features", "file": "public/vo/vo-features.mp3", "duration": 4.10 },
{ "id": "close", "file": "public/vo/vo-close.mp3", "duration": 2.80 }
],
"totalDuration": 10.15,
"fullAudioFile": "public/vo/vo-full.wav"
}
スクリプトオプション
| フラグ | デフォルト | 説明 |
|---|---|---|
--segments FILE | — | [{id, text}] セグメント定義を含むJSONファイル |
--text TEXT | — | 生成する単一テキスト(--segments の代替) |
--output-dir DIR | — | 出力オーディオファイルのディレクトリ(必須) |
--voice NAME | Kore | プリビルド音声名(音声テーブル参照) |
--model NAME | gemini-3.1-flash-tts-preview | Gemini TTSモデルID |
--director-notes TEXT | — | パフォーマンスガイダンス: スタイル、ペース、アクセント、呼吸、明瞭度。性別/年齢は制御しません(それには --voice を使用)。 |
--retries N | 3 | APIエラー時の最大再試行回数 |
--trim / --no-trim | --trim | セグメント境界の無音をトリミング |
--format FORMAT | mp3 | 出力形式: mp3 または wav |
終了コード
| コード | 意味 |
|---|---|
| 0 | 成功 |
| 1 | 必須引数または環境変数が不足 |
| 2 | 再試行を使い果たした後のAPIエラー |
| 3 | ffmpegがインストールされていない、または処理に失敗 |
| 4 | ファイルI/Oエラー |
仕組み(マルチセグメント)
Gemini TTSは、個別のAPIリクエスト間で音声の一貫性を保証しません。このスクリプトは以下の方法で解決します:
- すべてのセグメントを、間に
[3秒のポーズ]マーカーを入れて1つのプロンプトに結合 - 1回のAPI呼び出しで単一の連続オーディオファイルを生成
- ffmpegの
silencedetectを使用して、適応的閾値(初期ノイズ=-35dB、d=1.5秒、徐々に緩和)で無音ギャップを検出。正確な一致が見つかれば直接使用。閾値のジャンプ(少なすぎ→多すぎ)が発生した場合は、より高速な発話速度でオーディオを再生成し、セグメント間のポーズをより明確にしてから検出を再試行。 - 無音の中間点で分割して個別のセグメントファイルを作成
- 各セグメントから残りの無音パディング(片側約1.5秒)をトリミングし、0.15秒の呼吸スペースを保持
モデル
| モデル | 最適用途 |
|---|---|
gemini-3.1-flash-tts-preview | 最新、最も制御性が高く、200以上のオーディオタグに対応(デフォルト) |
gemini-2.5-flash-preview-tts | 高速、高品質、一般的な用途 |
gemini-2.5-pro-preview-tts | 最高品質、複雑なパフォーマンス |
音声
30のプリビルド音声:
| 音声 | 性別 | 特徴 | ピッチ |
|---|---|---|---|
| Achernar | 女性 | 柔らかい | 高め |
| Achird | 男性 | フレンドリー | 中低め |
| Algenib | 男性 | ざらついた | 低め |
| Algieba | 男性 | 滑らか | 低め |
| Alnilam | 男性 | しっかりした | 中低め |
| Aoede | 女性 | 風通しの良い | 中間 |
| Autonoe | 女性 | 明るい | 中間 |
| Callirrhoe | 女性 | のんびり | 中間 |
| Charon | 男性 | 情報提供型 | 低め |
| Despina | 女性 | 滑らか | 中間 |
| Enceladus | 男性 | 息混じり | 低め |
| Erinome | 女性 | 明瞭 | 中間 |
| Fenrir | 男性 | 興奮しやすい | 中低め |
| Gacrux | 女性 | 成熟した | 中間 |
| Iapetus | 男性 | 明瞭 | 中低め |
| Kore | 女性 | しっかりした | 中間 |
| Laomedeia | 女性 | 陽気な | 高め |
| Leda | 女性 | 若々しい | 高め |
| Orus | 男性 | しっかりした | 中低め |
| Puck | 男性 | 陽気な | 中間 |
| Pulcherrima | 男性 | 前向き | 中間 |
| Rasalgethi | 男性 | 情報提供型 | 中間 |
| Sadachbia | 男性 | 活気のある | 低め |
| Sadaltager | 男性 | 知識豊富 | 中間 |
| Schedar | 男性 | 均一 | 中低め |
| Sulafat | 女性 | 温かい | 中間 |
| Umbriel | 男性 | のんびり | 中低め |
| Vindemiatrix | 女性 | 優しい | 中間 |
| Zephyr | 女性 | 明るい | 高め |
| Zubenelgenubi | 男性 | カジュアル | 中低め |
ディレクターノート(--director-notes)
選択した音声に対するパフォーマンスガイダンス。重要なものだけを定義してください — 過剰に指定するとモデルの創造性が制限され、結果が悪化する可能性があります。
最も一般的な3つの指示はスタイル、ペース、アクセントですが、パフォーマンスに関連するカスタム指示を含めることもできます。
- スタイル — 感情的な品質と配信の特徴。説明的に:
"伝染性のある熱意 — リスナーは何かエキサイティングなことの一部だと感じるべき"は、単に"エネルギッシュ"よりも效果が良い。特性を重ねたり、ナレーション業界用語(例:「ボーカルスマイル」)を使用できます。 - ペース — 全体的な速度とリズムの変化。
"できるだけ速く話す"から"信じられないほど遅く流動的で、言葉が互いににじみ込み、緊迫感ゼロ"まで幅広く指定可能。 - アクセント — 具体的に指定。
"イギリスのクロイドンで聞かれるイギリス英語"は、単に"イギリスなまり"よりもはるかに効果的。
--director-notes "スタイル: 熱狂的で生意気なGenZ美容YouTuber。ペース: 非常に速く、ショート動画のインフルエンサーのような迅速な配信。アクセント: ラグナビーチ出身のサウスカリフォルニアのバレーガール。"
オーディオタグ
セグメントテキスト内のインライン [ブラケット] で単語ごとの制御が可能。ディレクターノートを局所的に上書きします。
[whispers] [shouting] [excited] [serious] [short pause] [laughs] [very fast] [very slow] [sarcastic] [curious]
創造的なタグも使用可能: [like dracula]、[whispering conspiratorially]
例: "[excited] これで全てが変わります! [short pause] その方法をお見せしましょう。"
参考資料
- プロンプティングガイド — スタイル、感情、アクセントのための高度なプロンプトエンジニアリング