Gemini API は Lyria RealTime を使用して、最先���のリアルタイム ストリーミング音楽生成モデルにアクセスできます。これにより、ユーザーが楽器の音楽をインタラクティブに作成、継続的に操作、演奏できるアプリをデベロッパーが構築できます。
Lyria RealTime を使用して作成できるものを体験するには、AI Studio で Prompt DJ アプリまたは MIDI DJ アプリを使用して試してみてください。
音楽生成の仕組み
Lyria RealTime 音楽生成では、WebSocket を使用して、永続的な双方向低レイテンシ ストリーミング接続を使用します。
音楽の生成と制御
Lyria RealTime は、websocket を使用してモデルとのリアルタイム通信を維持するという点で、Live API に似ています。ただし、モデルと直接やり取りすることはできず、特定の形式を使用してプロンプトを出す必要があるため、完全に同じではありません。
次のコードは、音楽を生成する方法を示しています。
Python
この例では、client.aio.live.music.connect()
を使用して Lyria RealTime セッションを初期化し、session.set_weighted_prompts()
を使用して最初のプロンプトと session.set_music_generation_config
を使用して最初の構成を送信し、session.play()
を使用して音楽生成を開始し、受信した音声チャンクを処理するように receive_audio()
を設定します。
import asyncio
from google import genai
from google.genai import types
client = genai.Client(api_key=API_KEY, http_options={'api_version': 'v1alpha'})
async def main():
async def receive_audio(session):
"""Example background task to process incoming audio."""
while True:
async for message in session.receive():
audio_data = message.server_content.audio_chunks[0].data
# Process audio...
await asyncio.sleep(10**-12)
async with (
client.aio.live.music.connect(model='models/lyria-realtime-exp') as session,
asyncio.TaskGroup() as tg,
):
# Set up task to receive server messages.
tg.create_task(receive_audio(session))
# Send initial prompts and config
await session.set_weighted_prompts(
prompts=[
types.WeightedPrompt(text='minimal techno', weight=1.0),
]
)
await session.set_music_generation_config(
config=types.LiveMusicGenerationConfig(bpm=90, temperature=1.0)
)
# Start streaming music
await session.play()
if __name__ == "__main__":
asyncio.run(main())
JavaScript
この例では、client.live.music.connect()
を使用して Lyria RealTime セッションを初期化してから、session.setWeightedPrompts()
を使用して最初のプロンプトと session.setMusicGenerationConfig
を使用して最初の構成を送信し、session.play()
を使用して音楽生成を開始し、受信したオーディオ チャンクを処理する onMessage
コールバックを設定します。
import { GoogleGenAI } from '@google/genai';
const ai = new GoogleGenAI({
apiKey: API_KEY, // Do not store your API client-side!
apiVersion: 'v1alpha',
});
// Create session object to control music generation.
const session: MusicSession = client.live.music.connect({
model: 'models/lyria-realtime-exp',
callbacks: {
onMessage: (message) => {
// Application logic: buffer and play using Web Audio API etc.
},
onError: (error) => {
console.error('music session error:', error);
},
onClose: () => {
console.log('Lyria RealTime stream closed.');
}
}
});
// Send initial prompts and config
await session.setWeightedPrompts({
weightedPrompts: [{ text: 'minimal techno', weight: 1.0 }],
});
await session.setMusicGenerationConfig({
musicGenerationConfig: { bpm: 90, temperature: 1.0 },
});
// Start generation
await session.play();
その後、session.play()
、session.pause()
、session.stop()
、session.reset_context()
を使用して、セッションの開始、一時停止、停止、リセットを行うことができます。
音楽をリアルタイムで操作する
Lyria RealTime にプロンプトを送信する
ストリームがアクティブな間は、いつでも新しい WeightedPrompt
メッセージを送信して、生成された音楽を変更できます。モデルは、新しい入力に基づいてスムーズに移行します。
プロンプトは、text
(実際のプロンプト)と weight
を含む正しい形式にする必要があります。weight
には、0
以外の任意の値を指定できます。通常、1.0
は出発点として適しています。
Python
await session.set_weighted_prompts(
prompts=[
{"text": "Piano", "weight": 2.0},
types.WeightedPrompt(text="Meditation", weight=0.5),
types.WeightedPrompt(text="Live Performance", weight=1.0),
]
)
JavaScript
await session.setMusicGenerationConfig({
weightedPrompts: [
{ text: 'Harmonica', weight: 0.3 },
{ text: 'Afrobeat', weight: 0.7 }
],
});
プロンプトを大幅に変更すると、モデルの遷移が急激になる可能性があるため、中間重み値をモデルに送信して、なんらかのクロスフェードを実装することをおすすめします。
構成を更新する
音楽生成パラメータをリアルタイムで更新することもできます。パラメータのみを更新することはできません。構成全体を設定する必要があります。設定しないと、他のフィールドがデフォルト値にリセットされます。
bpm やスケールの更新はモデルにとって大幅な変更であるため、reset_context()
を使用してコンテキストをリセットし、新しい構成を考慮するようにモデルに指示する必要があります。配信は停止しませんが、移行は困難です。他のパラメータについては、この操作を行う必要はありません。
Python
await session.set_music_generation_config(
config=types.LiveMusicGenerationConfig(
bpm=128,
scale=types.Scale.D_MAJOR_B_MINOR,
)
)
await session.reset_context();
JavaScript
await session.setMusicGenerationConfig({
musicGenerationConfig: { bpm: 120, density: 0.75 },
});
await session.reset_context();
Lyria RealTime のプロンプト ガイド
Lyria RealTime にプロンプトを出すために使用できるプロンプトの例を以下に示します。
- 機器:
303 Acid Bass, 808 Hip Hop Beat, Accordion, Alto Saxophone, Bagpipes, Balalaika Ensemble, Banjo, Bass Clarinet, Bongos, Boomy Bass, Bouzouki, Buchla Synths, Cello, Charango, Clavichord, Conga Drums, Didgeridoo, Dirty Synths, Djembe, Drumline, Dulcimer, Fiddle, Flamenco Guitar, Funk Drums, Glockenspiel, Guitar, Hang Drum, Harmonica, Harp, Harpsichord, Hurdy-gurdy, Kalimba, Koto, Lyre, Mandolin, Maracas, Marimba, Mbira, Mellotron, Metallic Twang, Moog Oscillations, Ocarina, Persian Tar, Pipa, Precision Bass, Ragtime Piano, Rhodes Piano, Shamisen, Shredding Guitar, Sitar, Slide Guitar, Smooth Pianos, Spacey Synths, Steel Drum, Synth Pads, Tabla, TR-909 Drum Machine, Trumpet, Tuba, Vibraphone, Viola Ensemble, Warm Acoustic Guitar, Woodwinds, ...
- 音楽のジャンル:
Acid Jazz, Afrobeat, Alternative Country, Baroque, Bengal Baul, Bhangra, Bluegrass, Blues Rock, Bossa Nova, Breakbeat, Celtic Folk, Chillout, Chiptune, Classic Rock, Contemporary R&B, Cumbia, Deep House, Disco Funk, Drum & Bass, Dubstep, EDM, Electro Swing, Funk Metal, G-funk, Garage Rock, Glitch Hop, Grime, Hyperpop, Indian Classical, Indie Electronic, Indie Folk, Indie Pop, Irish Folk, Jam Band, Jamaican Dub, Jazz Fusion, Latin Jazz, Lo-Fi Hip Hop, Marching Band, Merengue, New Jack Swing, Minimal Techno, Moombahton, Neo-Soul, Orchestral Score, Piano Ballad, Polka, Post-Punk, 60s Psychedelic Rock, Psytrance, R&B, Reggae, Reggaeton, Renaissance Music, Salsa, Shoegaze, Ska, Surf Rock, Synthpop, Techno, Trance, Trap Beat, Trip Hop, Vaporwave, Witch house, ...
- ムード/説明:
Acoustic Instruments, Ambient, Bright Tones, Chill, Crunchy Distortion, Danceable, Dreamy, Echo, Emotional, Ethereal Ambience, Experimental, Fat Beats, Funky, Glitchy Effects, Huge Drop, Live Performance, Lo-fi, Ominous Drone, Psychedelic, Rich Orchestration, Saturated Tones, Subdued Melody, Sustained Chords, Swirling Phasers, Tight Groove, Unsettling, Upbeat, Virtuoso, Weird Noises, ...
これらはほんの一例で、Lyria RealTime には他にも多くの機能があります。独自のプロンプトを試す
ベスト プラクティス
- クライアント アプリケーションは、スムーズな再生を確保するために、堅牢なオーディオ バッファリングを実装する必要があります。これにより、ネットワーク ジッターや生成レイテンシのわずかな変動を考慮できます。
- 効果的なプロンプト:
- わかりやすいラベルを付けます。ムード、ジャンル、楽器を説明する形容詞を使用します。
- 反復して徐々に調整します。プロンプトを完全に変更するのではなく、要素を追加または変更して、音楽をよりスムーズに変化させてみましょう。
WeightedPrompt
の重みをテストして、新しいプロンプトが進行中の生成にどの程度影響するかを調整します。
詳細な技術情報
このセクションでは、Lyria RealTime 音楽生成の使用方���について詳しく説明します。
仕様
- 出力形式: 未加工の 16 ビット PCM 音声
- サンプルレート: 48 kHz
- チャンネル: 2(ステレオ)
コントロール
音楽の生成は、次のような内容を含むメッセージを送信することでリアルタイムで影響を受けます。
WeightedPrompt
: 音楽的なアイデア、ジャンル、楽器、ムード、特徴を記述するテキスト文字列。複数のプロンプトを指定して、影響力をブレンドすることもできます。Lyra RealTime を適切にプロンプトする方法について詳しくは、上記をご覧ください。MusicGenerationConfig
: 音楽生成プロセスの構成。出力音声の特性に影響します。パラメータには次のものがあります。guidance
:(浮動小数点数)範囲:[0.0, 6.0]
。デフォルト:4.0
。モデルがプロンプトに従う厳密さを制御します。ガイダンスを高くすると、プロンプトに準拠しやすくなりますが、遷移が急になります。bpm
:(int)範囲:[60, 200]
。生成する音楽の 1 分あたりの拍数を設定します。新しい bpm を考慮に入れる場合は、モデルのコンテキストを停止/再生するか、リセットする必要があります。density
:(浮動小数点数)範囲:[0.0, 1.0]
。音符や音の密度を調整します。値が小さいほど、音楽はより間延びたものになり、値が大きいほど、音楽はより「忙しい」ものになります。brightness
:(浮動小数点数)範囲:[0.0, 1.0]
。音質を調整します。値が大きいほど、より「明るい」サウンドの音声が生成されます。一般的に、高周波数を強調します。scale
: (列挙型)生成する音楽音階(キーとモード)を設定します。SDK で提供されているScale
列挙型の値を使用します。新しいスケールを考慮に入れる場合は、モデルのコンテキストを停止/再生するか、リセットする必要があります。mute_bass
: (bool)デフォルト:False
。モデルが出力の低音を低減するかどうかを制御します。mute_drums
: (bool)デフォルト:False
。モデル出力で出力のドラムを減らすかどうかを制御します。only_bass_and_drums
: (bool)デフォルト:False
。ベースとドラムのみを出力するようにモデルを誘導します。
PlaybackControl
: 再生に関する操作(再生、一時停止、停止、コンテキストの再設定など)を行うコマンド。
bpm
、density
、brightness
、scale
で値が指定されていない場合、モデルは最初のプロンプトに基づいて最適な値を決定します。
temperature
(0.0 ~ 3.0、デフォルト 1.1)、top_k
(1 ~ 1,000、デフォルト 40)、seed
(0 ~ 2,147,483,647、デフォルトでランダムに選択)などの従来のパラメータも、MusicGenerationConfig
でカスタマイズできます。
列挙型の値をスケーリングする
モデルで使用できるスケール値は次のとおりです。
列挙値 | スケール / キー |
---|---|
C_MAJOR_A_MINOR |
C メジャー / A マイナー |
D_FLAT_MAJOR_B_FLAT_MINOR |
D♭ メジャー / B♭ マイナー |
D_MAJOR_B_MINOR |
D メジャー / B マイナー |
E_FLAT_MAJOR_C_MINOR |
E♭ メジャー / C マイナー |
E_MAJOR_D_FLAT_MINOR |
E メジャー / C♯/D♭ マイナー |
F_MAJOR_D_MINOR |
ヘ長調 / 変ホ短調 |
G_FLAT_MAJOR_E_FLAT_MINOR |
G♭ メジャー / E♭ マイナー |
G_MAJOR_E_MINOR |
G メジャー / E マイナー |
A_FLAT_MAJOR_F_MINOR |
A♭ メジャー / F マイナー |
A_MAJOR_G_FLAT_MINOR |
A メジャー / F♯/G♭ マイナー |
B_FLAT_MAJOR_G_MINOR |
B♭ メジャー / G マイナー |
B_MAJOR_A_FLAT_MINOR |
B メジャー / G♯/A♭ マイナー |
SCALE_UNSPECIFIED |
デフォルト / モデルにより判断 |
このモデルは演奏される音符をガイドできますが、相対音階を区別しません。したがって、各列挙型は相対的なメジャーとマイナーの両方に対応します。たとえば、C_MAJOR_A_MINOR
はピアノのすべての白鍵に対応し、F_MAJOR_D_MINOR
は B フラット以外のすべての白鍵に対応します。
制限事項
- インストルメンタルのみ: モデルはインストルメンタル ミュージックのみ生成します。
- 安全性: プロンプトは安全フィルタによってチェックされます。フィルタをトリガーするプロンプトは無視されます。その場合、出力の
filtered_prompt
フィールドに説明が書き込まれます。 - ウォーターマーク: 出力音声には、責任ある AI の原則に従って、識別用のウォーターマークが常に付加されます。
次のステップ
- 音楽ではなく、TTS モデルを使用して複数のスピーカーの会話を生成する方法を学びます。
- 画像や動画を生成する方法を学びます。
- 音楽や音声を生成する代わりに、Gemini が音声ファイルを理解する方法を学びます。
- Live API を使用して、Gemini とリアルタイムで会話できます。
その他のコードサンプルとチュートリ��ルについては、Cookbook をご覧ください。