L'API Gemini, che utilizza Lyria RealTime, fornisce accesso a un modello di generazione di musica in streaming in tempo reale all'avanguardia. Consente agli sviluppatori di creare applicazioni in cui gli utenti possono creare, dirigere e suonare musica strumentale in modo interattivo.
Per scoprire cosa si può creare utilizzando Lyria RealTime, provalo su AI Studio con le app Prompt DJ o MIDI DJ.
Come funziona la generazione di musica
La generazione di musica in tempo reale di Lyria utilizza una connessione di streaming bidirezionale, persistente e a bassa latenza che utilizza WebSocket.
Generare e controllare la musica
Lyria RealTime funziona un po' come l'API Live nel senso che utilizza websocket per mantenere una comunicazione in tempo reale con il modello. Non è ancora esattamente lo stesso, perché non puoi parlare con il modello e devi utilizzare un formato specifico per richiederlo.
Il seguente codice mostra come generare musica:
Python
Questo esempio inizializza la sessione Lyria RealTime utilizzando
client.aio.live.music.connect()
, poi invia un prompt iniziale con session.set_weighted_prompts()
insieme a una configurazione iniziale utilizzandosession.set_music_generation_config
, avvia la generazione di musica utilizzandosession.play()
e configurareceive_audio()
per elaborare i chunk audio che riceve.
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
Questo esempio inizializza la sessione Lyria RealTime utilizzando
client.live.music.connect()
, poi invia un prompt iniziale con session.setWeightedPrompts()
insieme a una configurazione iniziale utilizzandosession.setMusicGenerationConfig
, avvia la generazione di musica utilizzandosession.play()
e configura un callbackonMessage
per elaborare i chunk audio che riceve.
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();
Puoi quindi utilizzare session.play()
, session.pause()
, session.stop()
e
session.reset_context()
per avviare, mettere in pausa, interrompere o reimpostare la sessione.
Gestire la musica in tempo reale
Prompt Lyria RealTime
Mentre lo stream è attivo, puoi inviare nuovi messaggi WeightedPrompt
in qualsiasi momento per modificare la musica generata. Il modello eseguirà una transizione graduale in base al nuovo input.
I prompt devono seguire il formato corretto con un text
(il prompt effettivo) e un weight
. weight
può assumere qualsiasi valore tranne 0
. 1.0
è solitamente un buon punto di partenza.
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 }
],
});
Tieni presente che le transizioni del modello possono essere un po' brusche quando i prompt cambiano drasticamente, pertanto ti consigliamo di implementare un tipo di transizione graduale inviando al modello valori di peso intermedi.
Aggiorna la configurazione
Puoi anche aggiornare i parametri di generazione della musica in tempo reale. Non puoi semplicemente aggiornare un parametro, devi impostare l'intera configurazione, altrimenti gli altri campi verranno reimpostati sui valori predefiniti.
Poiché l'aggiornamento del BPM o della scala è un cambiamento drastico per il modello, dovrai anche dirgli di reimpostare il contesto utilizzando reset_context()
per tenere conto della nuova configurazione. Lo stream non verrà interrotto, ma sarà una transizione brusca. Non è necessario farlo per gli altri parametri.
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();
Guida ai prompt per Lyria RealTime
Di seguito è riportato un elenco non esaustivo di prompt che puoi utilizzare per richiedere informazioni a Lyria RealTime:
- Strumenti:
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, ...
- Genere musicale:
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, ...
- Stato d'animo/descrizione:
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, ...
Questi sono solo alcuni esempi, Lyria RealTime può fare molto di più. Sperimenta con i tuoi prompt.
Best practice
- Le applicazioni client devono implementare un buffering audio affidabile per garantire una riproduzione fluida. In questo modo, puoi tenere conto del jitter della rete e delle lievi variazioni nella latenza di generazione.
- Prompt efficaci:
- Fornisci una descrizione dettagliata. Utilizza aggettivi che descrivano l'atmosfera, il genere e la strumentazione.
- Esegui l'iterazione e modifica gradualmente. Anziché cambiare completamente il prompt, prova ad aggiungere o modificare elementi per trasformare la musica in modo più fluido.
- Fai esperimenti con il peso su
WeightedPrompt
per influenzare l'impatto di un nuovo prompt sulla generazione in corso.
Dettagli tecnici
Questa sezione descrive le specifiche su come utilizzare la generazione di musica in tempo reale di Lyria.
Specifiche
- Formato di output: audio PCM non compresso a 16 bit
- Frequenza di campionamento: 48 kHz
- Canali: 2 (stereo)
Controlli
La generazione di musica può essere influenzata in tempo reale inviando messaggi contenenti:
WeightedPrompt
: una stringa di testo che descrive un'idea musicale, un genere, uno strumento, un'atmosfera o una caratteristica. È possibile fornire più prompt per mescolare le influenze. Consulta sopra per ulteriori dettagli su come richiedere al meglio Lyria RealTime.MusicGenerationConfig
: configurazione per il processo di generazione della musica, che influisce sulle caratteristiche dell'audio in uscita. I parametri includono:guidance
: (float) Intervallo:[0.0, 6.0]
. Valore predefinito:4.0
. Controlla la stretta osservanza dei prompt da parte del modello. Un livello di guida più elevato migliora l'aderenza al prompt, ma rende le transizioni più improvvise.bpm
: (int) Intervallo:[60, 200]
. Imposta i battiti al minuto che preferisci per la musica generata. Devi interrompere/riprodurre o reimpostare il contesto per il modello in modo che tenga conto del nuovo bpm.density
: (float) Intervallo:[0.0, 1.0]
. Controlla la densità delle note/degli suoni musicali. Valori più bassi producono musica più rarefatta, mentre valori più elevati producono musica più "complessa".brightness
: (float) Intervallo:[0.0, 1.0]
. Regola la qualità tonale. I valori più elevati producono un audio più "brillante", in genere enfatizzando le frequenze più alte.scale
: (enum) Imposta la scala musicale (chiave e modalità) per la generazione. Utilizza i valori dell'enumScale
forniti dall'SDK. Devi interrompere/riprodurre o reimpostare il contesto per il modello in modo che tenga conto della nuova scala.mute_bass
: (bool) predefinito:False
. Controlla se il modello riduce i bassi delle uscite.mute_drums
: (bool) predefinito:False
. Controlla se le uscite del modello riducono i tamburi delle uscite.only_bass_and_drums
: (bool) predefinito:False
. Indirizza il modello in modo che cerchi di produrre solo basso e batteria.
PlaybackControl
: comandi per controllare gli aspetti della riproduzione, ad esempio riprodurre, mettere in pausa, interrompere o reimpostare il contesto.
Per bpm
, density
, brightness
e scale
, se non viene fornito alcun valore, il
modello deciderà cosa è meglio in base ai prompt iniziali.
Anche i parametri più classici come temperature
(da 0,0 a 3,0, valore predefinito 1,1), top_k
(da 1 a 1000, valore predefinito 40) e seed
(da 0 a 2 147 483 647, selezionato in modo casuale per
valore predefinito) sono personalizzabili in MusicGenerationConfig
.
Valori enum della scala
Di seguito sono riportati tutti i valori di scala che il modello può accettare:
Valore enum | Scala / chiave |
---|---|
C_MAJOR_A_MINOR |
Do maggiore / La minore |
D_FLAT_MAJOR_B_FLAT_MINOR |
Re♭ maggiore / si♭ minore |
D_MAJOR_B_MINOR |
Do maggiore / si minore |
E_FLAT_MAJOR_C_MINOR |
Mi♭ maggiore / Do minore |
E_MAJOR_D_FLAT_MINOR |
Mi maggiore / Do♯/Re♭ minore |
F_MAJOR_D_MINOR |
Fa maggiore / Re minore |
G_FLAT_MAJOR_E_FLAT_MINOR |
Sol♭ maggiore / mi♭ minore |
G_MAJOR_E_MINOR |
Sol maggiore / Mi minore |
A_FLAT_MAJOR_F_MINOR |
La♭ maggiore / fa minore |
A_MAJOR_G_FLAT_MINOR |
La maggiore / fa♯/sol♭ minore |
B_FLAT_MAJOR_G_MINOR |
Si♭ maggiore / Sol minore |
B_MAJOR_A_FLAT_MINOR |
Do maggiore / Sol♯/La♭ minore |
SCALE_UNSPECIFIED |
Predefinito / Il modello decide |
Il modello è in grado di guidare le note suonate, ma
non distingue tra tonalità relative. Pertanto, ogni enum corrisponde sia al valore maggiore che a quello minore relativo. Ad esempio, C_MAJOR_A_MINOR
corrisponde a tutti
i tasti bianchi di un pianoforte e F_MAJOR_D_MINOR
a tutti i tasti bianchi
tranne il Si bemolle.
Limitazioni
- Solo strumentale: il modello genera solo musica strumentale.
- Sicurezza: i prompt vengono controllati da filtri di sicurezza. I prompt che attivano i filtri
verranno ignorati, nel qual caso verrà scritta una spiegazione nel
campo
filtered_prompt
dell'output. - Filigrana: l'audio in uscita è sempre contrassegnato da una filigrana per l'identificazione in base ai nostri principi dell'AI responsabile.
Passaggi successivi
- Invece di musica, scopri come generare conversazioni con più altoparlanti utilizzando i modelli TTS.
- Scopri come generare immagini o video.
- Invece di generare musica o audio, scopri come Gemini può comprendere i file audio.
- Conversa con Gemini in tempo reale utilizzando l'API Live.
Consulta il Cookbook per altri esempi di codice e tutorial.