はじめに
Google DeepMindが開発した Lyria 3 Pro は、テキストプロンプトや画像から最大3分間のプロ品質楽曲を生成できるAI音楽モデルです。2026年4月7日に Vertex AI と Gemini API でパブリックプレビューとして公開されました。
同じLyriaシリーズの「Lyria RealTime」はWebSocketを使ったリアルタイムストリーミング向けですが、Lyria 3 Proはイントロ・バース・コーラス・ブリッジといった楽曲構成を持つフルトラック生成に特化しています。
この記事では、Lyria 3 Pro を Gemini API から呼び出す方法を Python コードとともに解説します。
この記事で学べること
- Lyria 3 と Lyria 3 Pro の違いと使い分け
- Gemini API から Python で楽曲を生成する方法
- 歌詞・テンポ・楽曲構成の詳細な制御方法
- 画像入力を使ったムードマッチング生成
- WAV 形式での高品質出力
- プロンプトのベストプラクティス
対象読者
- AI 音楽生成をプロダクトや業務に組み込みたいエンジニア
- 動画 BGM・ゲームサウンドトラック・ポッドキャスト挿入音楽の自動生成に取り組んでいる方
- Gemini API を活用した新しいユースケースを探している開発者
前提環境
- Python 3.10+
- Gemini API キー(Google AI Studio で取得)
-
google-genaiパッケージ(v0.8+)
TL;DR
-
Lyria 3 Clip(
lyria-3-clip-preview): 30 秒クリップ生成、高速・量産向け -
Lyria 3 Pro(
lyria-3-pro-preview): 最大約 3 分のフル楽曲生成、構成制御対応 - 通常の
generateContentAPI にresponse_mime_type="audio/mp3"を渡すだけで楽曲生成が開始できる -
[Verse][Chorus][Bridge]のセクションタグとタイムスタンプで楽曲構成を細かく制御可能 - 画像を最大10枚まで入力でき、ビジュアルのムードに合わせた楽曲生成が可能
- Lyria 3 Pro のみ WAV(44.1kHz ステレオ)出力に対応
- 全出力に SynthID 音声透かし + C2PA コンテンツ認証が自動付与される
Lyria 3 と Lyria 3 Pro の違い
2 つのモデルは生成時間と用途で明確に使い分けられます1。
| 項目 | Lyria 3(Clip) | Lyria 3 Pro |
|---|---|---|
| モデル ID | lyria-3-clip-preview |
lyria-3-pro-preview |
| 最大生成時間 | 約 30 秒 | 約 3 分 |
| 出力形式 | MP3 | MP3 / WAV |
| 楽曲構成制御 | 基本 | フル(Intro/Verse/Chorus/Bridge/Outro) |
| 向いている用途 | ソーシャルメディア資産、プロトタイプ、大量生成 | 完全楽曲、BGM 制作、プロダクション |
| 入力コンテキスト | 131,072 トークン | 131,072 トークン |
| バッチ API | 非対応 | 非対応 |
Lyria 3 Clip は短いサウンドスニペットを高速に量産する用途に最適で、Lyria 3 Pro は複雑な楽曲構成を必要とするフルトラック制作に使います。
環境セットアップ
必要なパッケージをインストールします。
pip install google-genai pillow python-dotenv
API キーを環境変数に設定します。
export GEMINI_API_KEY="your-api-key-here"
クライアントの初期化は次のとおりです。
from google import genai
from google.genai import types
import os
client = genai.Client(api_key=os.environ["GEMINI_API_KEY"])
基本的な楽曲生成(Lyria 3 Clip)
まず 30 秒クリップで基本的な動作を確認します2。
from google import genai
from google.genai import types
import os
client = genai.Client(api_key=os.environ["GEMINI_API_KEY"])
response = client.models.generate_content(
model="lyria-3-clip-preview",
contents=(
"An upbeat electronic dance track with synthesizer leads "
"and a driving 128 BPM beat. D minor."
),
config=types.GenerateContentConfig(
response_mime_type="audio/mp3"
)
)
# 音声データを保存
for part in response.candidates[0].content.parts:
if hasattr(part, "inline_data"):
with open("clip_output.mp3", "wb") as f:
f.write(part.inline_data.data)
print("clip_output.mp3 に保存しました")
inline_data.data に MP3 バイト列が格納されています。hasattr チェックは、response_modalities に TEXT を含める場合に歌詞テキストのパーツが混在するため、その対策です。
Lyria 3 Pro でフル楽曲を生成する
モデルを lyria-3-pro-preview に切り替えるだけで最大 3 分の楽曲が生成できます。
response = client.models.generate_content(
model="lyria-3-pro-preview",
contents=(
"An epic cinematic orchestral piece about a hero's journey home. "
"Starts with a solo piano intro, builds through sweeping strings, "
"and climaxes with a massive wall of sound including full brass and percussion. "
"Duration: 3 minutes. Key: G major. Tempo: 80 BPM."
),
config=types.GenerateContentConfig(
response_mime_type="audio/mp3"
)
)
for part in response.candidates[0].content.parts:
if hasattr(part, "inline_data"):
with open("hero_journey.mp3", "wb") as f:
f.write(part.inline_data.data)
print("hero_journey.mp3 に保存しました")
プロンプトに Duration: 3 minutes を明示することで、Lyria 3 Pro のフル尺生成能力を最大限に引き出せます。
楽曲構成と歌詞の詳細制御
Lyria 3 Pro は [Verse] [Chorus] [Bridge] などのセクションタグと、タイムスタンプ指定による細かい構成制御をサポートしています2。
セクションタグと歌詞指定
prompt = """
A heartfelt indie pop song. 90 BPM. Key of D major.
[Intro] 0:00-0:15
Soft acoustic guitar only
[Verse] 0:15-0:45
"Walking through the morning light, nothing feels the same
Every shadow tells a story, every cloud has got a name"
[Chorus] 0:45-1:15
"We're flying higher than before, reaching for the stars
Nothing's gonna hold us back, we are who we are"
[Bridge] 1:30-1:50
Build-up with strings, no vocals
[Outro] 2:30-3:00
Gentle fade with piano
"""
response = client.models.generate_content(
model="lyria-3-pro-preview",
contents=prompt,
config=types.GenerateContentConfig(
response_modalities=["AUDIO", "TEXT"],
response_mime_type="audio/mp3"
)
)
response_modalities=["AUDIO", "TEXT"] を指定すると、音声データと並んで生成された歌詞テキストも返されます。
歌詞テキストと音声を分けて取り出す
for part in response.candidates[0].content.parts:
if hasattr(part, "text"):
print("生成された歌詞:")
print(part.text)
elif hasattr(part, "inline_data"):
with open("indie_pop.mp3", "wb") as f:
f.write(part.inline_data.data)
print("indie_pop.mp3 に保存しました")
公式ドキュメントでは「テキストパーツが常に最初とは限らない」と明記されているため、hasattr による型チェックで各パーツを処理する実装が推奨されています。
画像入力を使ったムードマッチング生成
テキストに加え、最大 10 枚の画像を入力してムードや雰囲気を楽曲に反映させることができます。
import PIL.Image
# 雰囲気の参照画像を読み込む
image = PIL.Image.open("sunset_cityscape.jpg")
response = client.models.generate_content(
model="lyria-3-pro-preview",
contents=[
image,
(
"Generate a 2-minute ambient electronic track that captures "
"the mood and atmosphere of this image. No vocals. "
"Gentle synthesizer pads and subtle percussion."
)
],
config=types.GenerateContentConfig(
response_mime_type="audio/mp3"
)
)
for part in response.candidates[0].content.parts:
if hasattr(part, "inline_data"):
with open("ambient_cityscape.mp3", "wb") as f:
f.write(part.inline_data.data)
print("ambient_cityscape.mp3 に保存しました")
この機能は、動画のサムネイルや写真集の BGM 自動生成など、ビジュアルコンテンツと音楽の連携で特に効果的です。複数の画像を渡すことで、ストーリー展開に沿った楽曲生成も可能です。
WAV 形式での高品質出力(Lyria 3 Pro のみ)
Lyria 3 Pro は WAV(44.1kHz ステレオ)出力をサポートしています。Lyria 3 Clip では WAV 形式は利用できません。
response = client.models.generate_content(
model="lyria-3-pro-preview",
contents=(
"A high-fidelity jazz trio with upright bass, piano, and brushed drums. "
"4/4 time. 120 BPM. Warm and intimate feel. 2 minutes."
),
config=types.GenerateContentConfig(
response_mime_type="audio/wav" # Lyria 3 Pro のみ有効
)
)
for part in response.candidates[0].content.parts:
if hasattr(part, "inline_data"):
with open("jazz_trio.wav", "wb") as f:
f.write(part.inline_data.data)
print("jazz_trio.wav に保存しました(44.1kHz ステレオ)")
WAV は MP3 に比べてファイルサイズが大きくなりますが、ポストプロダクションや DAW への取り込みなど音楽制作ワークフローへの統合に適しています。
プロンプトのベストプラクティス
Google Cloud の公式プロンプティングガイドに基づくポイントをまとめます。
含めると精度が上がる要素
| 要素 | 具体例 |
|---|---|
| ジャンル |
"indie pop", "jazz", "cinematic orchestral"
|
| テンポ (BPM) |
"120 BPM", "slow 60 BPM"
|
| 調 / スケール |
"G major", "D minor", "Dorian mode"
|
| 楽器名 | "acoustic guitar, strings, piano" |
| 時間 |
"2 minutes", "3-minute song"
|
| 雰囲気 |
"epic", "melancholic", "uplifting"
|
| ボーカル指定 |
"No vocals", "Male vocals", "Female lead vocals"
|
| 言語 | 日本語プロンプトで日本語歌詞が生成される |
日本語楽曲の生成
Lyria 3 Pro は日本語を含む 8 言語(英語・ドイツ語・スペイン語・フランス語・ヒンディー語・日本語・韓国語・ポルトガル語)の歌詞生成をサポートしています。
response = client.models.generate_content(
model="lyria-3-pro-preview",
contents=(
"切ない J-POP バラード。テンポ 75 BPM。C メジャー。"
"失恋をテーマにした歌詞。2 分 30 秒。"
"ピアノとストリングスが中心の編成。"
),
config=types.GenerateContentConfig(
response_mime_type="audio/mp3"
)
)
プロンプトの言語が歌詞の言語に対応するため、日本語プロンプトで記述するだけで自然です。
SynthID 音声透かしと安全設計
全ての Lyria 3 出力には以下が自動付与されます1。
- SynthID 音声透かし: 人間の耳には聞こえない形でAI生成を示すデジタル透かし。SynthID Detector で検出可能
- C2PA コンテンツ認証: 業界標準の Content Credentials によるメタデータ署名
トレーニングデータは YouTube や Google 内の権利処理済みコンテンツを使用しており、生成物が既存楽曲と類似していないかの出力フィルタリングも実施されています。
注意点
- 非決定性: 同一プロンプトでも毎回異なる結果が生成される
- マルチターン編集非対応: 「もっとテンポを上げて」のような会話型の修正は現時点で非対応。修正が必要な場合はプロンプトを変更して再生成する
- 特定アーティスト名の制限: 特定アーティストの声や楽曲スタイルの模倣を明示的に指示するとセーフティフィルターにより拒否される場合がある
- バッチ API・キャッシング非対応: 大量生成には独自の並列処理実装が必要
-
WAV 出力は Lyria 3 Pro のみ:
lyria-3-clip-previewにaudio/wavを指定するとエラーになる
まとめ
-
Lyria 3 Pro(
lyria-3-pro-preview)で最大 3 分のフル楽曲を生成でき、[Verse][Chorus]などのセクションタグとタイムスタンプで構成を細かく制御できる -
Lyria 3 Clip(
lyria-3-clip-preview)は 30 秒クリップの高速生成に最適で、量産用途に向いている - 通常の Gemini API の
generateContentをresponse_mime_type="audio/mp3"で呼び出すだけで楽曲生成が始められる - 画像を最大 10 枚入力でき、ビジュアルコンテンツのムードに合わせた楽曲自動生成が実現する
- SynthID 透かしと C2PA 認証が全出力に自動付与され、商用利用でのコンプライアンス対応に役立つ
動画 BGM、ゲームサウンドトラック、ポッドキャスト挿入音楽など、AI 音楽生成の活用領域は広がっています。Gemini API の汎用エンドポイントからシームレスに呼び出せる点が、既存の AI アプリケーションへの統合を容易にしています。
参考リンク
- Lyria 3 音楽生成ガイド(Gemini API)
- Lyria 3 Pro Preview モデル仕様
- Lyria 3 と Lyria 3 Pro on Vertex AI(Google Cloud Blog)
- Lyria 3 Pro 公式プロンプティングガイド
- 開発者向け Lyria 3 解説(Google AI Blog)
- Lyria 3 モデル仕様(Vertex AI)
- SynthID 音声透かし