Die Gemini API mit Lyria RealTime bietet Zugriff auf ein hochmodernes Modell zur Musikgenerierung in Echtzeit. Damit können Entwickler Anwendungen erstellen, in denen Nutzer interaktiv instrumentale Musik erstellen, kontinuierlich steuern und ausführen 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
Bei der Echtzeit-Musikgenerierung mit 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 Websockets verwendet werden, um eine Echtzeitkommunikation mit dem Modell aufrechtzuerhalten. Es ist immer noch nicht genau dasselbe, da Sie nicht mit dem Modell sprechen können und einen bestimmten Prompt verwenden müssen.
Der folgende Code zeigt, 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 gesendet, zusammen mit einer ersten Konfiguration mit session.set_music_generation_config
. 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(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 mit session.play()
gestartet und ein onMessage
-Callback eingerichtet, um die empfangenen Audio-Chunks zu verarbeiten.
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);
Anschließend können Sie session.play()
, session.pause()
, session.stop()
und session.reset_context()
verwenden, um die Sitzung zu starten, zu pausieren, zu beenden oder zurückzusetzen.
Musik in Echtzeit steuern
Prompt an Lyria RealTime senden
Während des Streams kannst du jederzeit neue WeightedPrompt
-Nachrichten senden, um die generierte Musik zu ändern. Das Modell reagiert fließend auf die neue Eingabe.
Die Prompts müssen das richtige Format haben, mit einem text
(dem eigentlichen Prompt) und einem weight
. weight
kann jeden Wert außer 0
annehmen. 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 }
],
});
Die Modellübergänge können etwas abrupt sein, wenn Sie die Prompts drastisch ändern. Es wird daher empfohlen, eine Art Überblendung zu implementieren, indem Sie Zwischengewichtungswerte an das Modell senden.
Konfiguration aktualisieren
Sie können die Parameter für die Musikgenerierung auch in Echtzeit aktualisieren. Sie können nicht nur einen Parameter aktualisieren, sondern müssen die gesamte Konfiguration festlegen, da die anderen Felder sonst auf ihre Standardwerte zurückgesetzt werden.
Da das Aktualisieren des BPM oder des Maßstabs eine drastische Änderung für das Modell darstellt, müssen Sie ihm auch mitteilen, dass es seinen Kontext mit reset_context()
zurücksetzen soll, damit die neue Konfiguration berücksichtigt wird. Der Stream wird dadurch nicht beendet, aber es wird einen harten Übergang geben. Für die anderen Parameter ist das nicht erforderlich.
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();
Anleitung für Prompts für Lyria RealTime
Hier ist eine unvollständige Liste von Prompts, die Sie für Lyria RealTime verwenden können:
- Zahlungsmittel:
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 eigene Prompts aus.
Best Practices
- Clientanwendungen müssen ein robustes Audio-Buffering implementieren, um eine reibungslose Wiedergabe zu gewährleisten. So werden Netzwerk-Jitter und geringfügige Schwankungen bei der Generierungslatenz berücksichtigt.
- Effektive Prompts:
- Verwenden Sie anschauliche Worte. Verwende Adjektive, die die Stimmung, das Genre und die Instrumentierung beschreiben.
- Schrittweise iterieren und steuern. Anstatt den Prompt komplett zu ändern, können Sie Elemente hinzufügen oder ändern, um die Musik sanfter zu morphen.
- Mit dem Gewicht auf
WeightedPrompt
können Sie beeinflussen, wie stark sich ein neuer Prompt auf die laufende Generierung auswirkt.
Technische Details
In diesem Abschnitt wird beschrieben, wie Sie die Musikgenerierung in Echtzeit mit Lyria verwenden.
Spezifikationen
- Ausgabeformat: Rohes 16‑Bit-PCM-Audio
- Abtastrate: 48 kHz
- Kanäle: 2 (Stereo)
Steuerelemente
Die Musikgenerierung kann in Echtzeit beeinflusst werden, indem Nachrichten mit folgenden Inhalten gesendet werden:
WeightedPrompt
: Ein Textstring, der eine musikalische Idee, ein Genre, ein Instrument, eine Stimmung oder eine Eigenschaft beschreibt. Es können mehrere Prompts angegeben werden, um Einflüsse zu kombinieren. Oben finden Sie weitere Informationen dazu, wie Sie Lyria RealTime am besten auffordern.MusicGenerationConfig
: Konfiguration für die Musikgenerierung, die die Eigenschaften des Ausgabes beeinflusst. Folgende Parameter sind verfügbar:guidance
: (float) Bereich:[0.0, 6.0]
. Standard:4.0
. Steuert, wie streng sich das Modell an die Prompts hält. Bei einer höheren Gewichtung wird der Prompt besser eingehalten, aber die Übergänge sind abrupter.bpm
: (int) Bereich:[60, 200]
. Legt die Anzahl der Beats pro Minute für die generierte Musik fest. Sie müssen den Kontext für das Modell stoppen/wiedergeben oder zurücksetzen, damit die neuen BPM berücksichtigt werden.density
: (float) Bereich:[0.0, 1.0]
. Steuert die Dichte von Noten/Klängen. Niedrigere Werte führen zu spärlicherer Musik, höhere Werte zu „geschäftigerer“ Musik.brightness
: (float) Bereich:[0.0, 1.0]
. Passt die tonale Qualität an. Höhere Werte führen zu einem „helleren“ Klang, bei dem in der Regel höhere Frequenzen betont werden.scale
: (Enum) Legt die Tonleiter (Tonart und Modus) für die Generierung fest. Verwenden Sie die vom SDK bereitgestelltenScale
-Enum-Werte. Sie müssen den Kontext für das Modell beenden/wiedergeben oder zurücksetzen, damit die neue Skalierung berücksichtigt wird.mute_bass
: (bool) Standard:False
. Steuert, ob das Modell den Bass der Ausgaben reduziert.mute_drums
: (bool) Standard:False
. Legt fest, ob das Modell die Schlagzeugspuren in der Ausgabe reduziert.only_bass_and_drums
: (bool) Standard:False
. Weisen Sie das Modell an, nur Bass und Schlagzeug auszugeben.music_generation_mode
: (Enum) Gibt an, ob sich das Modell aufQUALITY
(Standardwert) oderDIVERSITY
von Musik konzentrieren soll. Sie kann auch aufVOCALIZATION
gesetzt werden, damit das Modell Gesang als weiteres Instrument generiert (fügen Sie ihn als neuen Prompt hinzu).
PlaybackControl
: Befehle zum Steuern der Wiedergabe, z. B. zum Abspielen, Pausieren, Stoppen oder Zurücksetzen des Kontexts.
Für bpm
, density
, brightness
und scale
wird, wenn kein Wert angegeben ist, vom Modell entschieden, was gemäß Ihren ursprünglichen Prompts am besten ist.
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 ebenfalls in der MusicGenerationConfig
angepasst werden.
Enum-Werte skalieren
Hier sind alle Skalenwerte, die das Modell akzeptieren kann:
Enum-Wert | Maßstab / Legende |
---|---|
C_MAJOR_A_MINOR |
C-Dur / A-Moll |
D_FLAT_MAJOR_B_FLAT_MINOR |
Des-Dur / B-Moll |
D_MAJOR_B_MINOR |
D-Dur / H-Moll |
E_FLAT_MAJOR_C_MINOR |
Es-Dur / C-Moll |
E_MAJOR_D_FLAT_MINOR |
E-Dur / Cis-/Des-Moll |
F_MAJOR_D_MINOR |
F-Dur / D-Moll |
G_FLAT_MAJOR_E_FLAT_MINOR |
Ges-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 / Fis-Moll/Ges-Moll |
B_FLAT_MAJOR_G_MINOR |
B-Dur / G-Moll |
B_MAJOR_A_FLAT_MINOR |
H-Dur / Gis-/As-Moll |
SCALE_UNSPECIFIED |
Standard / Das Modell entscheidet |
Das Modell kann die gespielten Noten leiten, unterscheidet aber nicht zwischen relativen Tonarten. Jedes Enum entspricht also sowohl dem relativen Dur als auch dem relativen Moll. C_MAJOR_A_MINOR
würde beispielsweise allen weißen Tasten eines Klaviers entsprechen und F_MAJOR_D_MINOR
allen weißen Tasten außer B.
Beschränkungen
- Nur Instrumental: Das Modell generiert nur Instrumentalmusik.
- Sicherheit: Prompts werden von Sicherheitsfiltern 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: Die Audioausgabe wird immer mit einem Wasserzeichen versehen, um sie gemäß unseren Grundsätzen für verantwortungsbewusste KI identifizieren zu können.
Nächste Schritte
- Anstelle von Musik können Sie mit TTS-Modellen Unterhaltungen mit mehreren Sprechern generieren.
- Bilder oder Videos generieren
- Wenn Sie Musik oder Audioinhalte generieren möchten, erfahren Sie hier, wie Gemini Audiodateien verstehen kann.
- Sie können sich über die Live API in Echtzeit mit Gemini unterhalten.
Weitere Codebeispiele und Anleitungen finden Sie im Cookbook.