>_tech-draft
Firebaseのアイコン
Firebase
動画公開日
タイトル

Build apps that talk with Firebase AI Logic text-to-speech

再生時間

7分 4秒

Firebase AI LogicとGemini TTSで実現する表現豊かな音声合成ガイド

ポイント

  • Firebase AI LogicとGemini TTSモデルを活用し、ウェブアプリケーションで自然かつ表現豊かな音声合成を実現する方法を解説します。
  • オーディオタグ、プロンプト構造、複数話者対応などの高度な機能により、感情やニュアンス、複数の声での会話を音声に盛り込む手法を紹介。
  • Firebaseのセキュリティとスケーラビリティを享受しつつ、複雑なオーディオパイプラインなしに、ダイナミックで没入感のあるAIアプリケーション構築の知見が得られます。

はじめに:Firebase AI LogicとGemini TTSの進化こんにちは!今回は、Firebase AI Logicと最新のGemini Text-to-Speech(TTS)モデルを活用して、いかに自然で表現豊かな音声合成を実現するかについてご紹介します。ウェブアプリケーションが人間のような自然な声で、笑ったりささやいたり、記述されたあらゆるトーンに適応して話すことができたらどうでしょうか?Firebase AI Logicを使えば、それが現実になります。

この1ヶ月間で、Firebase AI Logicは最新のGemini FlashおよびGemini Flash Lightモデルのサポートを追加しました。しかし、中でも特筆すべきは、最新のGemini TTSモデルの追加です。Gemini TTSモデルは、強力な低遅延の音声生成機能を提供し、非常に自然な出力、制御可能なプロンプト、そして正確なナレーション制御のための表現豊かなオーディオタグを可能にします。

これにより、音声合成機能を組み込んだ素晴らしいAIアプリケーションを、これまで以上に簡単に構築できるようになりました。AI Logicを通じてこのモデルにアクセスすることで、Firebaseアプリを保護する認証やApp Checkといったセキュリティ機能も享受できます。

Gemini TTSモデルの基本設定

早速、コード内でTTSモデルへのアクセスをいかに簡単に設定できるかを見ていきましょう。ここでは、具体的なコードブロックは動画の文字起こしには含まれていませんが、設定の考え方をご説明します。

モデルの初期化

まず、getGenerativeModel を使用してモデルを初期化し、TTSモデル名を指定します。この録画時点では、利用可能な最新モデルは「Gemini 3.1 Flash TTS Preview」です。最新バージョンについては、必ずドキュメントをご確認ください。

他のマルチモーダルプロンプトの場合には、ここでシステム命令(system instruction)を定義しますが、Gemini TTSモデルはこのパラメーターを使用しないため、省略します。これらのモデルは、別の方法で追加の指示を受け取ることができますが、これについては後ほど詳しく説明します。

レスポンスモダリティの設定

次に、generation config を定義します。ここでは、response modalities を明示的に audio に設定することが必須かつ重要です。テキスト読み上げモデルは、当然ながらテキストや画像ではなく、音声出力を生成するためです。

generation config オブジェクトには、オプションで speech config も含まれています。ここで、提供されるテキストの言語、つまりモデルが話す言語を指定できます。これはオプションパラメーターであり、省略した場合でも、Gemini TTSモデルはプロンプトから少なくとも40の言語を自動的に検出し、単一のリクエスト内で複数の言語を混ぜることも可能です。生成される音声の決定的な発音が必要な場合は、ここで設定すると良いでしょう。

音声の選択

voice config の下では、モデルの音声(声質)を指定します。Gemini TTSモデルは、それぞれ独自の異なる特徴を持つ30種類の合成HDボイスを提供しています。動画の例では、「Zephyr」という音声が選択されていました。

テキストから音声への変換プロセス

モデルが設定されたら、読み上げるテキストを送信するのは非常に簡単です。プロンプトテキストとともに generateContent を呼び出します。

response modalitiesaudio に設定されているため、合成された音声は、Base64エンコードされたPCM文字列としてインラインデータパートで返されます。これを実際に使用可能にするためには、音声が正しく生成されたことを確認し、Base64文字列を抽出し、それをカスタムの音声再生関数が理解できる生のArrayBufferにデコードする必要があります。このプロセスを経て、生成された音声をアプリケーションで再生できるようになります。

表現力を高める高度な音声合成機能

単にテキストを読み上げるだけでなく、音声に感情や特定のニュアンスを加えることで、よりダイナミックな体験を提供できます。Gemini TTSモデルでは、そのための強力な機能が用意されています。

1. オーディオタグ(Audio Tags)の活用

システム命令が使えないGemini TTSモデルは、プロンプト自体の中に指示を認識する機能を持っています。その一つが「オーディオタグ」です。

オーディオタグは、Gemini 3.x TTSモデルでサポートされる新しい機能で、感情タグをプロンプトテキストに直接インラインで注入し、モデルの応答をガイドすることができます。オーディオタグを使用すると、Geminiは [um][sigh] といった非音声サウンドを伝えたり、[excited][serious] のようなタグで音声のスタイルを変更したりできます。

例えば、笑い声と「えーっと」という間を挿入した場合、「Welcome to the [laugh] um, Firebase developer YouTube channel. [um]」のように記述するだけで、音声の雰囲気がシームレスに変化します。プロンプトにオーディオタグを追加するだけで、音声の全体的な雰囲気が完全に変わることを実感できます。

2. プロンプト構造(Prompt Structure)による全体的なトーン設定

より長い段落全体にわたって全体的な雰囲気を設定したい場合は、「プロンプト構造」が役立ちます。

プロンプトに以下の4つのコンポーネントを含めることで、音声に対してはるかに詳細な指示を自然言語で提供できます。これらの要素は、audio profilescenedirector's notessample context です。これらを組み合わせることで、オーディオタグと同様に、プロンプトにより多くの情報を追加するだけで、音声の全体的な雰囲気を大きく変えることが可能です。

複数話者対応(Multiple Speakers)でダイナミックな会話を実現

Firebase AI LogicとGemini TTSモデルは、単一のテキストプロンプト内で、異なる話者に異なる音声を使用するようにモデルを設定する機能も提供しています。これは非常にクールな機能です。

単一の voice config の代わりに、2人の話者を個別の名前(例: JackとJill)にマッピングした multi-speaker voice config を定義できます。例えば、最初の話者JackにはOrisの声を、2番目の話者JillにはZephyrの声をマッピングします。

モデルに送信するプロンプトでは、各行の先頭に話者名をプレフィックスするだけで、Geminiは自動的に音声を切り替え、単一のオーディオ応答としてシームレスな複数キャラクターの会話を生成します。以下はその会話の例です。

Jack: Welcome to the Firebase developer YouTube channel.
Jill: Thanks. What's new this month?
Jack: Firebase AI supports Gemini text-to-speech models.
Jill: What? No way.

この機能により、開発者は、複雑なオーディオパイプラインを管理したり、クライアント側で個別のオーディオトラックを結合したりすることなく、単一のテキストプロンプトから2人の異なるキャラクターが自然な会話をしている音声を生成できます。これは、ダイナミックな多キャラクターによるストーリーテリングから、没入型多言語学習アプリケーションまで、幅広い可能性を解き放ちます。

まとめ:Firebase AI Logicで実現する次世代の音声体験

ご覧いただいたように、Firebase AI Logicは、モデルを設定し、プロンプトを記述するだけで、ネイティブで表現豊かな音声をアプリに追加することを可能にします。そして、これらすべては、すでに信頼されているFirebaseのセキュリティとスケーラビリティに裏打ちされています。

Firebase AI LogicとGemini APIを使用した音声合成機能の利用を開始するには、以下のドキュメントリンクをご確認ください。皆さんがどのようなものを構築するのか、楽しみにしています!

参考動画