L'API Gemini, qui utilise Lyria RealTime, donne accès à un modèle de génération de musique en streaming en temps réel de pointe. Il permet aux développeurs de créer des applications dans lesquelles les utilisateurs peuvent créer, diriger en continu et interpréter de la musique instrumentale de manière interactive.
Pour découvrir ce que vous pouvez créer avec Lyria RealTime, essayez-le dans AI Studio à l'aide des applications Prompt DJ ou MIDI DJ.
Fonctionnement de la génération de musique
La génération de musique en temps réel Lyria utilise une connexion de streaming persistante, bidirectionnelle et à faible latence à l'aide de WebSocket.
Générer et contrôler de la musique
Lyria RealTime fonctionne un peu comme l'API Live, dans le sens où il utilise des websockets pour maintenir une communication en temps réel avec le modèle. Ce n'est pas tout à fait la même chose, car vous ne pouvez pas parler au modèle et vous devez utiliser un format spécifique pour l'inviter.
Le code suivant montre comment générer de la musique:
Python
Cet exemple initialise la session Lyria RealTime à l'aide de client.aio.live.music.connect()
, puis envoie une invite initiale avec session.set_weighted_prompts()
ainsi qu'une configuration initiale à l'aide de session.set_music_generation_config
, démarre la génération de musique à l'aide de session.play()
et configure receive_audio()
pour traiter les segments audio qu'il reçoit.
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
Cet exemple initialise la session Lyria RealTime à l'aide de client.live.music.connect()
, puis envoie une invite initiale avec session.setWeightedPrompts()
ainsi qu'une configuration initiale à l'aide de session.setMusicGenerationConfig
, démarre la génération de musique à l'aide de session.play()
et configure un rappel onMessage
pour traiter les segments audio qu'il reçoit.
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();
Vous pouvez ensuite utiliser session.play()
, session.pause()
, session.stop()
et session.reset_context()
pour démarrer, suspendre, arrêter ou réinitialiser la session.
Contrôler la musique en temps réel
Interroger Lyria RealTime
Tant que la diffusion est active, vous pouvez envoyer de nouveaux messages WeightedPrompt
à tout moment pour modifier la musique générée. Le modèle effectuera une transition en douceur en fonction de la nouvelle entrée.
Les requêtes doivent respecter le bon format avec un text
(la requête réelle) et un weight
. weight
peut prendre n'importe quelle valeur, à l'exception de 0
. 1.0
est généralement un bon point de départ.
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 }
],
});
Notez que les transitions de modèle peuvent être un peu abruptes en cas de modification radicale des requêtes. Il est donc recommandé d'implémenter une sorte de fondu croisé en envoyant des valeurs de poids intermédiaires au modèle.
Mettre à jour la configuration
Vous pouvez également modifier les paramètres de génération de musique en temps réel. Vous ne pouvez pas simplement mettre à jour un paramètre. Vous devez définir l'ensemble de la configuration, sinon les autres champs seront réinitialisés sur leurs valeurs par défaut.
Étant donné que la mise à jour du BPM ou de l'échelle est un changement radical pour le modèle, vous devez également lui demander de réinitialiser son contexte à l'aide de reset_context()
pour prendre en compte la nouvelle configuration. La diffusion ne s'arrêtera pas, mais la transition sera difficile. Vous n'avez pas besoin de le faire pour les autres paramètres.
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();
Guide des requêtes pour Lyria RealTime
Voici une liste non exhaustive des requêtes que vous pouvez utiliser pour inviter 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, ...
- Genre musical:
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, ...
- État d'esprit/Description:
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, ...
Ce ne sont là que quelques exemples. Lyria RealTime peut faire bien plus. Testez vos propres requêtes.
Bonnes pratiques
- Les applications clientes doivent implémenter une mise en mémoire tampon audio robuste pour assurer une lecture fluide. Cela permet de tenir compte du jitter réseau et des légères variations de latence de génération.
- Requêtes efficaces :
- Misez sur la description. Utilisez des adjectifs décrivant l'ambiance, le genre et l'instrumentation.
- Itérez et orientez progressivement. Plutôt que de modifier complètement la requête, essayez d'ajouter ou de modifier des éléments pour transformer la musique plus facilement.
- Testez le poids sur
WeightedPrompt
pour influencer l'impact d'une nouvelle invite sur la génération en cours.
Détails techniques
Cette section explique comment utiliser la génération de musique en temps réel Lyria.
Spécifications
- Format de sortie: audio PCM 16 bits brut
- Taux d'échantillonnage : 48 kHz
- Canaux: 2 (stéréo)
Commandes
Vous pouvez influencer la génération de musique en temps réel en envoyant des messages contenant:
WeightedPrompt
: chaîne de texte décrivant une idée, un genre, un instrument, une ambiance ou une caractéristique musicale. Plusieurs invites peuvent être fournies pour mélanger les influences. Pour en savoir plus sur la meilleure façon d'inviter Lyria RealTime, consultez la section ci-dessus.MusicGenerationConfig
: configuration du processus de génération de musique, qui influence les caractéristiques de l'audio de sortie. Voici quelques exemples de paramètres :guidance
: (float) Plage:[0.0, 6.0]
. Valeur par défaut :4.0
. Contrôle la rigueur avec laquelle le modèle suit les requêtes. Un niveau de guidage plus élevé améliore l'adhésion à la requête, mais rend les transitions plus abruptes.bpm
: (entier) Plage:[60, 200]
. Définit le nombre de battements par minute que vous souhaitez pour la musique générée. Vous devez arrêter/lire ou réinitialiser le contexte du modèle pour qu'il prenne en compte le nouveau BPM.density
: (float) Plage:[0.0, 1.0]
. Contrôle la densité des notes/sons musicaux. Des valeurs plus faibles produisent une musique plus clairsemée, tandis que des valeurs plus élevées produisent une musique plus "dense".brightness
: (float) Plage:[0.0, 1.0]
. Ajuste la qualité tonale. Des valeurs plus élevées produisent un son "plus clair", qui met généralement l'accent sur les fréquences plus élevées.scale
: (énumération) définit la gamme musicale (clé et mode) pour la génération. Utilisez les valeurs d'énumérationScale
fournies par le SDK. Vous devez arrêter/lire ou réinitialiser le contexte du modèle pour qu'il prenne en compte la nouvelle échelle.mute_bass
: (bool) Par défaut:False
. Indique si le modèle réduit les basses des sorties.mute_drums
: (bool) Par défaut:False
. Détermine si les sorties du modèle réduisent les tambours des sorties.only_bass_and_drums
: (bool) Par défaut:False
. Orientez le modèle pour qu'il essaie de ne générer que des basses et des percussions.
PlaybackControl
: commandes permettant de contrôler les aspects de la lecture, tels que la lecture, la mise en pause, l'arrêt ou la réinitialisation du contexte.
Pour bpm
, density
, brightness
et scale
, si aucune valeur n'est fournie, le modèle décidera de la meilleure option en fonction de vos requêtes initiales.
Les paramètres plus classiques tels que temperature
(de 0,0 à 3,0, par défaut 1,1), top_k
(de 1 à 1 000, par défaut 40) et seed
(de 0 à 2 147 483 647, sélectionnés de manière aléatoire par défaut) sont également personnalisables dans MusicGenerationConfig
.
Échelle des valeurs enum
Voici toutes les valeurs d'échelle que le modèle peut accepter:
Valeur enum | Échelle / Clé |
---|---|
C_MAJOR_A_MINOR |
Do majeur / La mineur |
D_FLAT_MAJOR_B_FLAT_MINOR |
Ré bémol majeur / Si bémol mineur |
D_MAJOR_B_MINOR |
Ré majeur / Si mineur |
E_FLAT_MAJOR_C_MINOR |
Mi bémol majeur / Do mineur |
E_MAJOR_D_FLAT_MINOR |
Mi majeur / Do#/Ré bémol mineur |
F_MAJOR_D_MINOR |
Fa majeur / Ré mineur |
G_FLAT_MAJOR_E_FLAT_MINOR |
Sol bémol majeur / Mi bémol mineur |
G_MAJOR_E_MINOR |
Sol majeur / Mi mineur |
A_FLAT_MAJOR_F_MINOR |
La bémol majeur / Fa mineur |
A_MAJOR_G_FLAT_MINOR |
La majeur / Fa♯/Sol♭ mineur |
B_FLAT_MAJOR_G_MINOR |
Si bémol majeur / Sol mineur |
B_MAJOR_A_FLAT_MINOR |
Si majeur / Sol♯/La♭ mineur |
SCALE_UNSPECIFIED |
Par défaut / Le modèle décide |
Le modèle est capable de guider les notes jouées, mais ne fait pas la distinction entre les tonalités relatives. Ainsi, chaque énumération correspond à la version majeure et mineure relative. Par exemple, C_MAJOR_A_MINOR
correspond à toutes les touches blanches d'un piano, et F_MAJOR_D_MINOR
à toutes les touches blanches sauf le si bémol.
Limites
- Instrumental uniquement: le modèle ne génère que de la musique instrumentale.
- Sécurité: les requêtes sont vérifiées par des filtres de sécurité. Les requêtes déclenchant les filtres seront ignorées, auquel cas une explication sera écrite dans le champ
filtered_prompt
de la sortie. - Filigranage: l'audio de sortie est toujours filigrané à des fins d'identification, conformément à nos principes d'IA responsable.
Étape suivante
- Au lieu de la musique, découvrez comment générer une conversation multi-locuteurs à l'aide des modèles TTS.
- Découvrez comment générer des images ou des vidéos.
- Au lieu de générer de la musique ou de l'audio, découvrez comment Gemini peut comprendre les fichiers audio.
- Discutez en temps réel avec Gemini à l'aide de l'API Live.
Consultez le Cookbook pour obtenir d'autres exemples de code et tutoriels.