Die Gemini API bietet mit Lyria RealTime Zugriff auf ein hochmodernes Modell zur Echtzeitgenerierung von Streamingmusik. Mit dieser Technologie können Entwickler Apps erstellen, mit denen Nutzer interaktiv Instrumentalmusik erstellen, kontinuierlich steuern und abspielen können.
Wenn Sie sehen möchten, was mit Lyria RealTime möglich ist, können Sie die Apps Prompt DJ oder MIDI DJ in AI Studio ausprobieren.
So funktioniert die Musikgenerierung
Für die Echtzeit-Musikgenerierung von Lyria wird eine persistente, bidirektionale Streamingverbindung mit niedriger Latenz über WebSocket verwendet.
Musik generieren und steuern
Lyria RealTime funktioniert ähnlich wie die Live API, da sie WebSockets verwendet, um eine Echtzeitkommunikation mit dem Modell aufrechtzuerhalten. Es ist aber noch nicht ganz dasselbe, da Sie nicht mit dem Modell sprechen können und ein bestimmtes Format verwenden müssen, um es zu fragen.
Im folgenden Code wird gezeigt, wie Musik generiert wird:
Python
In diesem Beispiel wird die Lyria RealTime-Sitzung mit client.aio.live.music.connect()
initialisiert. Anschließend wird mit session.set_weighted_prompts()
ein erster Prompt zusammen mit einer ersten Konfiguration mit session.set_music_generation_config
gesendet. Die Musikgenerierung wird mit session.play()
gestartet und receive_audio()
wird eingerichtet, um die empfangenen Audio-Chunks zu verarbeiten.
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
In diesem Beispiel wird die Lyria RealTime-Sitzung mit client.live.music.connect()
initialisiert. Anschließend wird mit session.setWeightedPrompts()
ein erster Prompt zusammen mit einer ersten Konfiguration mit session.setMusicGenerationConfig
gesendet. Die Musikgenerierung wird mit session.play()
gestartet und ein onMessage
-Callback wird eingerichtet, um die empfangenen Audio-Chunks zu verarbeiten.
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();
Mit session.play()
, session.pause()
, session.stop()
und session.reset_context()
können Sie die Sitzung dann starten, pausieren, beenden oder zurücksetzen.
Musik in Echtzeit steuern
Prompt Lyria RealTime
Solange der Stream aktiv ist, kannst du jederzeit neue WeightedPrompt
-Nachrichten senden, um die generierte Musik zu ändern. Das Modell wechselt dann nahtlos auf die neue Eingabe.
Die Prompts müssen dem richtigen Format mit einer text
(der tatsächliche Prompt) und einer weight
entsprechen. weight
kann jeden Wert außer 0
haben. 1.0
ist in der Regel ein guter Ausgangspunkt.
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 }
],
});
Hinweis: Bei drastischen Änderungen der Prompts können die Modellübergänge etwas abrupt sein. Daher wird empfohlen, eine Art Cross-Fading zu implementieren, indem Zwischengewichtswerte an das Modell gesendet werden.
Konfiguration aktualisieren
Außerdem kannst du die Parameter für die Musikerzeugung in Echtzeit aktualisieren. Sie können nicht nur einen Parameter aktualisieren, sondern müssen die gesamte Konfiguration festlegen. Andernfalls werden die anderen Felder auf die Standardwerte zurückgesetzt.
Da das Aktualisieren der BPM oder der Tonleiter eine drastische Änderung für das Modell darstellt, musst du es auch mit reset_context()
zum Zurücksetzen des Kontexts auffordern, damit die neue Konfiguration berücksichtigt wird. Der Stream wird dadurch nicht beendet, aber die Umstellung ist schwierig. Bei den anderen Parametern ist das nicht erforderlich.
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();
Prompt-Leitfaden für Lyria RealTime
Im Folgenden finden Sie eine unvollständige Liste von Prompts, die Sie für Lyria RealTime verwenden können:
- Instrumente:
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, ...
- Musikgenre:
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, ...
- Stimmung/Beschreibung:
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, ...
Das sind nur einige Beispiele. Lyria RealTime kann noch viel mehr. Probieren Sie es mit eigenen Prompts aus.
Best Practices
- Clientanwendungen müssen eine robuste Audiopufferung implementieren, um eine flüssige Wiedergabe zu ermöglichen. So können Netzwerkjitter und geringfügige Abweichungen bei der Generierungslatenz berücksichtigt werden.
- Effektive Prompts:
- Verwenden Sie anschauliche Worte. Verwende Adjektive, die Stimmung, Genre und Instrumentierung beschreiben.
- Optimieren Sie schrittweise. Anstatt den Prompt komplett zu ändern, kannst du Elemente hinzufügen oder ändern, um die Musik flüssiger zu verändern.
- Mit dem Gewicht unter
WeightedPrompt
können Sie beeinflussen, wie stark sich ein neuer Prompt auf die aktuelle Generierung auswirkt.
Technische Details
In diesem Abschnitt wird die Verwendung der Echtzeit-Musikgenerierung von Lyria beschrieben.
Spezifikationen
- Ausgabeformat: Rohes 16-Bit-PCM-Audio
- Abtastrate: 48 kHz
- Kanäle: 2 (Stereo)
Steuerelemente
Die Musikgenerierung kann in Echtzeit durch das Senden von Nachrichten beeinflusst werden, die Folgendes enthalten:
WeightedPrompt
: Ein Textstring, der eine musikalische Idee, ein Genre, ein Instrument, eine Stimmung oder ein Merkmal beschreibt. Es können mehrere Prompts angegeben werden, um Einflüsse zu kombinieren. Weitere Informationen dazu, wie Sie Lyria RealTime am besten anregen, finden Sie oben.MusicGenerationConfig
: Konfiguration für den Musikgenerierungsprozess, die die Eigenschaften der Ausgabeaudio beeinflusst. Zu den Parametern gehören:guidance
: (float) Bereich:[0.0, 6.0]
. Standard:4.0
. Steuert, wie genau das Modell den Prompts folgt. Eine höhere Anleitung verbessert die Einhaltung des Prompts, macht aber Übergänge abrupter.bpm
: (int) Bereich:[60, 200]
. Hier legen Sie die gewünschten Schläge pro Minute für die generierte Musik fest. Du musst den Kontext für das Modell anhalten/wiedergeben oder zurücksetzen, damit die neue BPM berücksichtigt wird.density
: (float) Bereich:[0.0, 1.0]
. Damit wird die Dichte der Noten/Töne gesteuert. Je niedriger der Wert, desto spärlicher ist die Musik. Je höher der Wert, desto „belebter“ ist die Musik.brightness
: (float) Bereich:[0.0, 1.0]
. Passt die Tonqualität an. Höhere Werte sorgen für einen „höheren“ Klang, bei dem in der Regel höhere Frequenzen betont werden.scale
: (Enum) Mit dieser Option wird die Tonleiter (Tonart und Modus) für die Generierung festgelegt. Verwende die vom SDK bereitgestelltenScale
-Enum-Werte. Sie müssen den Kontext für das Modell anhalten/wiedergeben oder zurücksetzen, damit die neue Skalierung berücksichtigt wird.mute_bass
: (bool) Standard:False
. Hiermit wird festgelegt, ob das Modell den Bass der Ausgabe reduziert.mute_drums
: (bool) Standard:False
. Hiermit wird festgelegt, ob die Trommeln der Ausgabe bei der Modellausgabe reduziert werden.only_bass_and_drums
: (bool) Standard:False
. Legen Sie fest, dass das Modell nur Bass und Schlagzeug ausgeben soll.
PlaybackControl
: Befehle zur Steuerung der Wiedergabe, z. B. Wiedergabe, Pause, Stopp oder Kontext zurücksetzen.
Wenn für bpm
, density
, brightness
und scale
kein Wert angegeben wird, entscheidet das Modell anhand Ihrer ursprünglichen Prompts, was am besten geeignet ist.
Auch klassischere Parameter wie temperature
(0,0 bis 3,0, Standardwert 1,1), top_k
(1 bis 1.000, Standardwert 40) und seed
(0 bis 2.147.483.647, standardmäßig zufällig ausgewählt) können in MusicGenerationConfig
angepasst werden.
Enum-Werte skalieren
Hier sind alle Skalenwerte, die vom Modell akzeptiert werden:
Enum-Wert | Maßstab / Tonart |
---|---|
C_MAJOR_A_MINOR |
C-Dur / a-Moll |
D_FLAT_MAJOR_B_FLAT_MINOR |
Des-Dur / B-Moll |
D_MAJOR_B_MINOR |
D-Dur / B-Moll |
E_FLAT_MAJOR_C_MINOR |
Es-Dur / C-Moll |
E_MAJOR_D_FLAT_MINOR |
E-Dur / C♯-/Des-Moll |
F_MAJOR_D_MINOR |
F-Dur / D-Moll |
G_FLAT_MAJOR_E_FLAT_MINOR |
G♭-Dur / Es-Moll |
G_MAJOR_E_MINOR |
G-Dur / E-Moll |
A_FLAT_MAJOR_F_MINOR |
As-Dur / f-Moll |
A_MAJOR_G_FLAT_MINOR |
A-Dur / F♯-/G♭-Moll |
B_FLAT_MAJOR_G_MINOR |
B♭-Dur / G-Moll |
B_MAJOR_A_FLAT_MINOR |
B-Dur / G♯/A♭-Moll |
SCALE_UNSPECIFIED |
Standardeinstellung / Modell entscheidet |
Das Modell kann die gespielten Noten anleiten, unterscheidet aber nicht zwischen relativen Tonarten. Jedes Enum entspricht also sowohl der relativen Haupt- als auch der relativen Nebenversion. C_MAJOR_A_MINOR
würde beispielsweise allen weißen Tasten eines Klaviers entsprechen und F_MAJOR_D_MINOR
allen weißen Tasten mit Ausnahme von B ♭.
Beschränkungen
- Nur Instrumentalmusik: Das Modell generiert nur Instrumentalmusik.
- Sicherheit: Prompts werden durch Sicherheitsfilter geprüft. Prompts, die die Filter auslösen, werden ignoriert. In diesem Fall wird eine Erklärung in das Feld
filtered_prompt
der Ausgabe geschrieben. - Wasserzeichen: Das Ausgabeaudio wird gemäß unseren Grundsätzen für verantwortungsbewusste KI immer mit einem Wasserzeichen versehen.
Nächste Schritte
- Anstelle von Musik kannst du mit den TTS-Modellen Unterhaltungen mit mehreren Sprechern generieren.
- Bilder oder Videos erstellen
- Statt Musik oder Audio zu generieren, können Sie herausfinden, wie Gemini Audiodateien verstehen kann.
- Mit der Live API können Sie in Echtzeit mit Gemini sprechen.
Weitere Codebeispiele und Anleitungen finden Sie im Rezeptbuch.