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(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";
import Speaker from "speaker";
import { Buffer } from "buffer";
const client = new GoogleGenAI({
apiKey: GEMINI_API_KEY,
apiVersion: "v1alpha" ,
});
async function main() {
const speaker = new Speaker({
channels: 2, // stereo
bitDepth: 16, // 16-bit PCM
sampleRate: 44100, // 44.1 kHz
});
const session = await client.live.music.connect({
model: "models/lyria-realtime-exp",
callbacks: {
onmessage: (message) => {
if (message.serverContent?.audioChunks) {
for (const chunk of message.serverContent.audioChunks) {
const audioBuffer = Buffer.from(chunk.data, "base64");
speaker.write(audioBuffer);
}
}
},
onerror: (error) => console.error("music session error:", error),
onclose: () => console.log("Lyria RealTime stream closed."),
},
});
await session.setWeightedPrompts({
weightedPrompts: [
{ text: "Minimal techno with deep bass, sparse percussion, and atmospheric synths", weight: 1.0 },
],
});
await session.setMusicGenerationConfig({
musicGenerationConfig: {
bpm: 90,
temperature: 1.0,
audioFormat: "pcm16", // important so we know format
sampleRateHz: 44100,
},
});
await session.play();
}
main().catch(console.error);
session.play()
、session.pause()
、session.stop()
、session.reset_context()
を使用して、セッションの開始、一時停止、停止、リセットを行うことができます。
音楽をリアルタイムで操作する
Prompt 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,
music_generation_mode=types.MusicGenerationMode.QUALITY
)
)
await session.reset_context();
JavaScript
await session.setMusicGenerationConfig({
musicGenerationConfig: {
bpm: 120,
density: 0.75,
musicGenerationMode: MusicGenerationMode.QUALITY
},
});
await session.reset_context();
Lyria RealTime のプロンプト ガイド
Lyria RealTime にプロンプトを送信するために使用できるプロンプトの例を以下に示します。
- Instruments:
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 の音楽生成機能の使用方法について詳しく説明します。
仕様
- 出力形式: RAW 16 ビット PCM 音声
- サンプルレート: 48 kHz
- チャンネル: 2(ステレオ)
コントロール
音楽の生成は、次の情報を含むメッセージを送信することでリアルタイムに影響を受ける可能性があります。
WeightedPrompt
: 音楽のアイデア、ジャンル、楽器、ムード、特徴を説明するテキスト文字列。複数のプロンプトを指定して、影響をブレンドすることもできます。Lyria RealTime を最適にプロンプトする方法について詳しくは、上記をご覧ください。MusicGenerationConfig
: 音楽生成プロセスの構成(出力音声の特性に影響します)。パラメータには次のものがあります。guidance
:(浮動小数点数)範囲:[0.0, 6.0]
。デフォルト:4.0
。モデルがプロンプトにどの程度厳密に従うかを制御します。ガイダンスの値を大きくすると、プロンプトへの準拠度は高くなりますが、トランジションがより急激になります。bpm
:(int)範囲:[60, 200]
。生成する音楽の BPM を設定します。新しい 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
。ベースとドラムのみを出力するようにモデルを誘導します。music_generation_mode
:(列挙型)音楽のQUALITY
(デフォルト値)またはDIVERSITY
のどちらに焦点を当てるかをモデルに指示します。また、VOCALIZATION
に設定して、モデルが発声を別の楽器として生成できるようにすることもできます(新しいプロンプトとして追加します)。
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 |
ハ長調 / イ短調 |
D_FLAT_MAJOR_B_FLAT_MINOR |
D♭ major / B♭ minor |
D_MAJOR_B_MINOR |
D major / B minor |
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 |
ト長調 / ホ短調 |
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
フィールドに説明が書き込まれます。 - 透かし: 出力音声には、Google の責任ある AI の原則に沿って、識別用の透かしが常に挿入されます。
次のステップ
- 音楽ではなく、TTS モデルを使用して複数の話者の会話を生成する方法を学びます。
- 画像や動画を生成する方法
- 音楽や音声の生成ではなく、Gemini が音声ファイルを理解する方法について説明します。
- Live API を使用して、Gemini とリアルタイムで会話できます。
コード例とチュートリアルについては、クックブックをご覧ください。