API-ja Gemini, duke përdorur Lyria RealTime , ofron qasje në një model gjenerimi muzike në kohë reale, të teknologjisë së fundit. Ai u lejon zhvilluesve të ndërtojnë aplikacione ku përdoruesit mund të krijojnë, drejtojnë vazhdimisht dhe interpretojnë muzikë instrumentale në mënyrë interaktive.
Për të përjetuar atë që mund të ndërtohet duke përdorur Lyria RealTime, provojeni në AI Studio duke përdorur aplikacionet Prompt DJ ose MIDI DJ !
Si funksionon gjenerimi i muzikës
Gjenerimi i muzikës Lyria RealTime përdor një lidhje transmetimi të vazhdueshme, dypalëshe dhe me vonesë të ulët duke përdorur WebSocket .
Gjeneroni dhe kontrolloni muzikën
Lyria RealTime funksionon pak a shumë si Live API në kuptimin që përdor websockets për të mbajtur një komunikim në kohë reale me modelin. Megjithatë, nuk është saktësisht e njëjta gjë, pasi nuk mund të flasësh me modelin dhe duhet të përdorësh një format specifik për ta nxitur atë.
Kodi i mëposhtëm tregon se si të gjenerohet muzikë:
Python
Ky shembull inicializon sesionin Lyria RealTime duke përdorur client.aio.live.music.connect() , pastaj dërgon një mesazh fillestar me session.set_weighted_prompts() së bashku me një konfigurim fillestar duke përdorur session.set_music_generation_config , fillon gjenerimin e muzikës duke përdorur session.play() dhe konfiguron receive_audio() për të përpunuar pjesët audio që merr.
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
Ky shembull inicializon sesionin Lyria RealTime duke përdorur client.live.music.connect() , pastaj dërgon një kërkesë fillestare me session.setWeightedPrompts() së bashku me një konfigurim fillestar duke përdorur session.setMusicGenerationConfig , fillon gjenerimin e muzikës duke përdorur session.play() dhe konfiguron një thirrje mbrapsht onMessage për të përpunuar pjesët audio që merr.
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);
Pastaj mund të përdorni session.play() , session.pause() , session.stop() dhe session.reset_context() për të filluar, ndaluar, ndaluar ose rivendosur sesionin.
Drejtoni muzikën në kohë reale
Prompt Lyria RealTime
Ndërsa transmetimi është aktiv, mund të dërgoni mesazhe të reja WeightedPrompt në çdo kohë për të ndryshuar muzikën e gjeneruar. Modeli do të kalojë pa probleme bazuar në të dhënat e reja hyrëse.
Kërkesat duhet të ndjekin formatin e duhur me një text (kërkesën aktuale) dhe një weight . weight mund të marrë çdo vlerë përveç 0 1.0 është zakonisht një pikënisje e mirë.
Python
from google.genai import types
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 }
],
});
Vini re se tranzicionet e modelit mund të jenë pak të menjëhershme kur ndryshohen në mënyrë drastike kërkesat, kështu që rekomandohet të zbatohet një lloj zbehjeje të kryqëzuar duke dërguar vlera të peshës së ndërmjetme në model.
Përditëso konfigurimin
Gjithashtu mund të përditësoni parametrat e gjenerimit të muzikës në kohë reale. Nuk mund të përditësoni vetëm një parametër, duhet të caktoni të gjithë konfigurimin, përndryshe fushat e tjera do të rivendosen në vlerat e tyre fillestare.
Meqenëse përditësimi i bpm ose shkallës është një ndryshim drastik për modelin, do t'ju duhet gjithashtu t'i thoni të rivendosë kontekstin e tij duke përdorur reset_context() për të marrë parasysh konfigurimin e ri. Kjo nuk do ta ndalojë rrjedhën, por do të jetë një tranzicion i vështirë. Nuk keni nevojë ta bëni këtë për parametrat e tjerë.
Python
from google.genai import types
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();
Udhëzues i shpejtë për Lyria RealTime
Ja një listë jo e plotë e pyetjeve që mund të përdorni për të nxitur Lyria RealTime:
- 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, ... - Zhanri i Muzikës:
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, ... - Gjendja shpirtërore/Përshkrimi:
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, ...
Këto janë vetëm disa shembuj, Lyria RealTime mund të bëjë shumë më tepër. Eksperimentoni me sugjerimet tuaja!
Praktikat më të mira
- Aplikacionet e klientëve duhet të zbatojnë një memorizim të fuqishëm audio për të siguruar riprodhim të qetë. Kjo ndihmon në marrjen në konsideratë të luhatjeve të rrjetit dhe ndryshimeve të vogla në vonesën e gjenerimit.
- Nxitje efektive:
- Jini përshkrues. Përdorni mbiemra që përshkruajnë gjendjen shpirtërore, zhanrin dhe instrumentacionin.
- Përsëriteni dhe drejtohuni gradualisht. Në vend që ta ndryshoni plotësisht kërkesën, provoni të shtoni ose modifikoni elementë për ta transformuar muzikën më lehtë.
- Eksperimentoni me peshën në
WeightedPromptpër të ndikuar se sa fort një kërkesë e re ndikon në gjenerimin në vazhdim.
Detajet teknike
Ky seksion përshkruan specifikat e përdorimit të gjenerimit të muzikës Lyria RealTime.
Specifikimet
- Formati i daljes: Audio PCM 16-bit i papërpunuar
- Shkalla e mostrës: 48kHz
- Kanalet: 2 (stereo)
Kontrollet
Gjenerimi i muzikës mund të ndikohet në kohë reale duke dërguar mesazhe që përmbajnë:
-
WeightedPrompt: Një varg teksti që përshkruan një ide, zhanër, instrument, gjendje shpirtërore ose karakteristikë muzikore. Mund të ofrohen disa kërkesa për të përzier ndikimet. Shihni më sipër për më shumë detaje se si të kërkoni më së miri Lyria RealTime. -
MusicGenerationConfig: Konfigurimi për procesin e gjenerimit të muzikës, që ndikon në karakteristikat e audios dalëse.). Parametrat përfshijnë:-
guidance: (notues) Diapazoni:[0.0, 6.0]. Parazgjedhja:4.0. Kontrollon se sa saktësisht i ndjek modeli udhëzimet. Udhëzimi më i lartë përmirëson respektimin e kërkesës, por i bën tranzicionet më të menjëhershme. -
bpm: (int) Diapazoni:[60, 200]. Cakton rrahjet për minutë që dëshironi për muzikën e gjeneruar. Duhet të ndaloni/luani ose të rivendosni kontekstin për modelin që merr parasysh bpm-në e re. -
density: (notuese) Diapazoni:[0.0, 1.0]. Kontrollon dendësinë e notave/tingujve muzikorë. Vlerat më të ulëta prodhojnë muzikë më të rrallë; vlerat më të larta prodhojnë muzikë "më të ngarkuar". -
brightness: (numër i lëvizshëm) Diapazoni:[0.0, 1.0]. Rregullon cilësinë tonale. Vlerat më të larta prodhojnë audio me tingull "më të ndritshëm", duke theksuar përgjithësisht frekuencat më të larta. -
scale: (Numërim) Vendos shkallën muzikore (Toni dhe Moda) për gjeneratën. Përdorni vlerat e enum-it tëScaletë ofruara nga SDK. Duhet të ndaloni/luani ose rivendosni kontekstin për modelin që të marrë në konsideratë shkallën e re. -
mute_bass: (bool) Parazgjedhur:False. Kontrollon nëse modeli zvogëlon basin e daljeve. -
mute_drums: (bool) Parazgjedhja:False. Kontrollon nëse daljet e modelit i zvogëlojnë bateritë e daljeve. -
only_bass_and_drums: (bool) Parazgjedhja:False. Drejtoni modelin që të përpiqet të nxjerrë vetëm bas dhe bateri. -
music_generation_mode: (Numërim) I tregon modelit nëse duhet të përqendrohet teQUALITY(vlera parazgjedhur) apoDIVERSITYi muzikës. Mund të vendoset gjithashtu nëVOCALIZATIONpër të lejuar modelin të gjenerojë vokalizime si një instrument tjetër (shtojini ato si pompa të reja).
-
-
PlaybackControl: Komanda për të kontrolluar aspektet e luajtjes, të tilla si luajtja, pauza, ndalimi ose rivendosja e kontekstit.
Për bpm , density , brightness dhe scale , nëse nuk jepet asnjë vlerë, modeli do të vendosë se çfarë është më e mira sipas udhëzimeve tuaja fillestare.
Parametra më klasikë si temperature (0.0 deri në 3.0, parazgjedhja 1.1), top_k (1 deri në 1000, parazgjedhja 40) dhe seed (0 deri në 2 147 483 647, të zgjedhur rastësisht si parazgjedhje) janë gjithashtu të personalizueshëm në MusicGenerationConfig .
Shkallo vlerat e numërimit
Këtu janë të gjitha vlerat e shkallës që modeli mund të pranojë:
| Vlera e Numërimit | Shkallë / Çelës |
|---|---|
C_MAJOR_A_MINOR | Do maxhor / La minor |
D_FLAT_MAJOR_B_FLAT_MINOR | Re♭ maxhor / Si♭ minor |
D_MAJOR_B_MINOR | Re maxhor / Si minor |
E_FLAT_MAJOR_C_MINOR | Mi♭ maxhor / Do minor |
E_MAJOR_D_FLAT_MINOR | Mi maxhor / Do♯/Re♭ minor |
F_MAJOR_D_MINOR | Fa maxhor / Re minor |
G_FLAT_MAJOR_E_FLAT_MINOR | Sol maxhor / Mi minor |
G_MAJOR_E_MINOR | Sol maxhor / Mi minor |
A_FLAT_MAJOR_F_MINOR | La♭ maxhor / Fa minor |
A_MAJOR_G_FLAT_MINOR | La maxhor / Fa♯/Sol♭ minor |
B_FLAT_MAJOR_G_MINOR | Si maxhor / Sol minor |
B_MAJOR_A_FLAT_MINOR | Si maxhor / Sol♯/La♭ minor |
SCALE_UNSPECIFIED | Parazgjedhur / Modeli vendos |
Modeli është i aftë të drejtojë notat që luhen, por nuk bën dallimin midis tonaliteteve relative. Kështu, çdo numërim korrespondon si me mazhoren relative ashtu edhe me minoren. Për shembull, C_MAJOR_A_MINOR do të korrespondonte me të gjitha tastet e bardha të një pianoje, dhe F_MAJOR_D_MINOR do të ishin të gjitha tastet e bardha përveç Si bemol.
Kufizime
- Vetëm instrumentale: Modeli gjeneron vetëm muzikë instrumentale.
- Siguria: Kërkesat kontrollohen nga filtrat e sigurisë. Kërkesat që aktivizojnë filtrat do të injorohen, në të cilin rast një shpjegim do të shkruhet në fushën
filtered_prompttë rezultatit. - Filigranimi: Audioja dalëse ka gjithmonë filigranim për identifikim duke ndjekur parimet tona të IA-së të Përgjegjshme .
Çfarë vjen më pas
- Në vend të muzikës, mësoni si të gjeneroni biseda me shumë folës duke përdorur modelet TTS ,
- Zbuloni se si të krijoni imazhe ose video ,
- Në vend të muzikës ose audios së gjeneratës, zbuloni se si Binjakët mund të kuptojnë skedarët audio ,
- Zhvilloni një bisedë në kohë reale me Gemini duke përdorur Live API .
Shfletoni Librin e Gatimit për më shumë shembuj kodi dhe tutoriale.