Gemini API TTS(Text-to-Speech)で漫才音声を生成してみた
はじめに
先日開催されたGoogle I/O 2025、AI関連の新発表が目白押しでしたが、その中でも自分の心を鷲掴みにしたのが、「Gemini 2.5」に搭載されたネイティブText-to-Speech(TTS)機能です。
デモで披露されたその声は、とても自然で感情豊か。
「これなら、Geminiだけで漫才のような音声コンテンツが作れるのでは?」
そんなくだらないアイディアが浮かびました。
思い立ったが吉日、今回はとりあえずGemini APIを使い、この最新TTS機能で漫才の生成を試してしてみた記録を、Zennの記事としてまとめます。
Gemini 2.5 TTSの特徴
Gemini 2.5 TTSの主な特徴は以下の通りです。
- 驚異的な自然さ: イントネーションや息遣いがリアルで、人間の声とほとんど区別がつかないレベルです。
- 豊かな感情表現: プロンプトで、「喜び」「悲しみ」といった細かなニュアンスまで声色に反映できる。
- 複数スピーカー: 複数の異なる声が、まるで本当に会話しているかのように自然に掛け合う(漫才には必須の機能!)
- プロンプトベースの制御: 自然言語で直感的にスタイルを指定できるため、簡単に制御できる。
セットアップ
さっそく、環境を整えていきましょう。
今回は、最近話題の高速Pythonパッケージマネージャーuv
を使ってプロジェクトをセットアップします。
API Keyの取得
まず、Gemini APIを利用するためのAPIキーが必要です。以下の手順で取得します。
- Google AI Studio にアクセスします。
- 「Get API key」をクリックし、新しいAPIキーを作成します。
- 生成されたAPIキーをコピーし、安全な場所に保管してください(コードに直接書き込まず、環境変数などを使うことを強く推奨)
uv
でプロジェクト作成
uv
は、Rust製の高速なPythonパッケージングツールです。
まだインストールしていない場合は、以下ページを参考にインストールします。
インストールできたら、プロジェクト用のディレクトリを作成し、uv
で仮想環境を構築、必要なライブラリをインストールします。
# プロジェクトディレクトリを作成して移動
mkdir manzai-speech
cd manzai-speech
# プロジェクトを初期化
uv init
# 仮想環境をアクティベート(macOS)
source .venv/bin/activate
# Gemini APIライブラリなどインストール
uv add google-genai python-dotenv
python-dotenv
はAPIキーを安全に管理するためにインストールします。.env
ファイルを作成し、以下のようにAPIキーを記述しておきましょう。
GEMINI_API_KEY="YOUR_API_KEY"
サンプルの実行
まずは、ドキュメントのサンプルでTTSが動作するか確認してみましょう。
import wave
from google import genai
from google.genai import types
# Set up the wave file to save the output:
def wave_file(filename, pcm, channels=1, rate=24000, sample_width=2):
with wave.open(filename, 'wb') as wf:
wf.setnchannels(channels)
wf.setsampwidth(sample_width)
wf.setframerate(rate)
wf.writeframes(pcm)
client = genai.Client(
api_key='GEMINI_API_KEY'
) # Gemini APIキーを設定してください
response = client.models.generate_content(
model='gemini-2.5-flash-preview-tts',
contents='Say cheerfully: Have a wonderful day!',
config=types.GenerateContentConfig(
response_modalities=['AUDIO'],
speech_config=types.SpeechConfig(
voice_config=types.VoiceConfig(
prebuilt_voice_config=types.PrebuiltVoiceConfig(
voice_name='Kore',
)
)
),
),
)
data = response.candidates[0].content.parts[0].inline_data.data
file_name = 'out.wav'
wave_file(file_name, data) # Saves the file to current directory
uv run simple-speeach.py
を実行し、out.wav
が生成されれば、基本的なセットアップは完了です。
漫才を生成してみる
いよいよ本番、漫才の生成に取り掛かります。
1. 台本を生成
まず、Geminiの生成モデル (gemini-2.0-flash
) を使って、漫才台本を生成する関数を作成します。
これで、指定した形式で漫才台本を生成してくれます。
実際に生成された台本は以下のようになりました。
tani: どうもー!taniです!
takeda: takedaです!よろしくお願いします!
tani: いやー、最近暑いですねー。
takeda: ほんまに!溶けるかと思いましたわ。
tani: そういえばtakedaさん、夏休みの予定って何かあるんですか?
takeda: まだ全然決めてないんですよ。taniさんは?
tani: 僕も特に…。あ、そうだ!二人で無人島生活でもしてみます?
takeda: 無人島!?いやいや、無理無理!虫とか絶対いるでしょ!
tani: 大丈夫ですよ!僕、虫よけスプレー持ってますから!
takeda: いや、そういう問題ちゃうねん!電気もガスも水道もない生活なんて考えられへん!
tani: まあ、そうですよね…。じゃあ、せめてキャンプとかどうですか?
takeda: キャンプか…。それなら、まだ…考えられるかな。
tani: よし!じゃあ、キャンプの準備でも始めますか!
takeda: ちょっと待って!まだ行くって決めてないから!
tani: (無視して)まずはテント選びからですね!
takeda: あーもう!話聞いて!
2. 複数スピーカーによる漫才音声を生成
次に、この台本を使って、Gemini TTSで音声化する関数を作成します。
ここでは、マルチスピーカーの設定を試してみます。
3. 音声ファイル書き出し
最後に、台本生成関数と音声生成関数を使って、漫才音声をファイルに書き出します。
uv run main.py
を実行してしばらくするとoutput.wav
が生成されるはずです。
こちらは、今回作ったサンプルリポジトリになります。
できたもの
さあ、生成された漫才音声を聞いてみましょう!
実際に聞いてみると…
- 声の自然さ: かなり人間に近い。
- 掛け合い: ちゃんと二人が会話しているように聞こえる!
- 漫才としての面白さ: プロンプトが適当なのか、しょうもない漫才になりました...
まとめ
Gemini 2.5のText-to-Speech機能を使って漫才を生成するという挑戦は、AIのクリエイティブな可能性を強く感じさせてくれるものでした。
現状では、APIの仕様確認や、プロンプトによる細かなニュアンス制御など、試行錯誤が必要な部分もあります。特に、漫才に不可欠な「間」や、観客の反応を予測するような高度な表現は、今後の大きな課題でしょう。
しかし、Gemini APIを使えば、台本生成から音声化までをプログラムで完結させられる道筋が見えました。
Gemini TTSは、エンターテイメントだけでなく、教育、アクセシビリティ、カスタマーサポートなど、声が必要なあらゆる場面に革命をもたらすポテンシャルを秘めています。
皆さんもぜひ、この「神ボイス」をAPI経由で体験し、新しいアイデアを形にしてみてはいかがでしょうか? AI漫才師がM-1の舞台に立つ日も、そう遠くない…かもしれません!
Discussion