Gemini API, duke përdorur Lyria RealTime , ofron akses në një model të gjenerimit të muzikës më të fundit, në kohë reale. Ai i lejon zhvilluesit të ndërtojnë aplikacione ku përdoruesit mund të krijojnë në mënyrë interaktive, të drejtojnë vazhdimisht dhe të performojnë muzikë instrumentale.
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 të vazhdueshme, me dy drejtime dhe me vonesë të ulët duke përdorur WebSocket .
Gjeneroni dhe kontrolloni muzikë
Lyria RealTime funksionon pak si Live API në kuptimin që po përdor websockets për të mbajtur një komunikim në kohë reale me modelin. Ende nuk është saktësisht e njëjtë pasi nuk mund të flisni me modelin dhe duhet të përdorni një format specifik për ta nxitur atë.
Kodi i mëposhtëm tregon se si të gjeneroni muzikë:
Python
Ky shembull inicializon sesionin e Lyria RealTime duke përdorur client.aio.live.music.connect()
, më pas dërgon një kërkesë fillestare 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 procesin e receive_audio()
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
Ky shembull inicializon seancën Lyria RealTime duke përdorur client.live.music.connect()
, më pas 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 atë audiochunk.
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();
Më pas mund të përdorni session.play()
, session.pause()
, session.stop()
dhe session.reset_context()
për të nisur, ndërprerë, ndaluar ose rivendosur seancën.
Drejtoni muzikën në kohë reale
Kërkoni në kohë reale Lyria
Ndërsa transmetimi është aktiv, mund të dërgoni mesazhe të reja WeightedPrompt
në çdo kohë për të ndryshuar muzikën e krijuar. Modeli do të kalojë pa probleme bazuar në hyrjen e re.
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
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ë paksa të papritura kur ndryshoni në mënyrë drastike kërkesat, kështu që rekomandohet të zbatoni një lloj zbehjeje të kryqëzuar duke dërguar vlera të ndërmjetme të peshës në model.
Përditëso konfigurimin
Ju gjithashtu mund të përditësoni parametrat e gjenerimit të muzikës në kohë reale. Ju nuk mund të përditësoni thjesht një parametër, duhet të vendosni të gjithë konfigurimin, përndryshe fushat e tjera do të rivendosen në vlerat e tyre të paracaktuara.
Meqenëse përditësimi i bpm ose i shkallës është një ndryshim drastik për modelin, do t'ju duhet gjithashtu t'i tregoni atij të rivendosë kontekstin e tij duke përdorur reset_context()
për të marrë parasysh konfigurimin e ri. Nuk do ta ndalojë transmetimin, por do të jetë një tranzicion i vështirë. Ju nuk keni nevojë ta bëni këtë për parametrat e tjerë.
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();
Udhëzues i shpejtë për Lyria RealTime
Këtu është një listë jo shteruese e kërkesave që mund të përdorni për të kërkuar 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/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ëta janë vetëm disa shembuj, Lyria RealTime mund të bëjë shumë më tepër. Eksperimentoni me kërkesat tuaja!
Praktikat më të mira
- Aplikacionet e klientëve duhet të zbatojnë buffering të fuqishëm audio për të siguruar riprodhim të qetë. Kjo ndihmon për të llogaritur nervozizmin e rrjetit dhe ndryshimet e vogla në vonesën e gjenerimit.
- Nxitja efektive:
- Jini përshkrues. Përdorni mbiemra që përshkruajnë gjendjen shpirtërore, zhanrin dhe instrumentet.
- Përsëriteni dhe drejtojeni gradualisht. Në vend që të ndryshoni plotësisht kërkesën, provoni të shtoni ose modifikoni elementë për të modifikuar muzikën më pa probleme.
- Eksperimentoni me peshën në
WeightedPrompt
për të ndikuar se sa fuqishëm një kërkesë e re ndikon në gjenerimin e vazhdueshëm.
Detaje teknike
Ky seksion përshkruan specifikat se si të përdoret gjenerimi i muzikës Lyria RealTime.
Specifikimet
- Formati i daljes: Audio PCM Raw 16-bit
- Shkalla e mostrës: 48 kHz
- 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 muzikore, zhanër, instrument, gjendje shpirtërore ose karakteristikë. Njoftimet e shumta mund të jepen për të përzier ndikimet. Shihni më lart për më shumë detaje se si të nxisni më mirë Lyria RealTime. -
MusicGenerationConfig
: Konfigurimi për procesin e gjenerimit të muzikës, duke ndikuar në karakteristikat e audios dalëse.). Parametrat përfshijnë:-
guidance
: (lundrues) Gama:[0.0, 6.0]
. Parazgjedhja:4.0
. Kontrollon se sa rreptësisht modeli ndjek kërkesat. Udhëzimi më i lartë përmirëson respektimin e kërkesës, por i bën tranzicionet më të papritura. -
bpm
: (int) Gama:[60, 200]
. Vendos rrahjet në minutë që dëshironi për muzikën e krijuar. Duhet të ndaloni/luani ose të rivendosni kontekstin për modelin që merr parasysh bpm-në e re. -
density
: (lundrues) Gama:[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
: (lundrues) Gama:[0.0, 1.0]
. Rregullon cilësinë e tonit. Vlerat më të larta prodhojnë audio me tingull "më të ndritshëm", në përgjithësi duke theksuar frekuencat më të larta. -
scale
: (Enum) Vendos shkallën muzikore (Key dhe Mode) për gjeneratën. Përdorni vleratScale
enum të ofruara nga SDK. Ju duhet të ndaloni/luani ose rivendosni kontekstin për modelin që merr parasysh shkallën e re. -
mute_bass
: (bool) Default:False
. Kontrollon nëse modeli redukton basin e daljeve. -
mute_drums
: (bool) Default:False
. Kontrollon nëse modeli rezulton i redukton bateritë e daljeve. -
only_bass_and_drums
: (bool) Default:False
. Drejtoni modelin në përpjekje për të nxjerrë vetëm bas dhe bateri.
-
-
PlaybackControl
: Komandat për të kontrolluar aspektet e riprodhimit, të tilla si luajtja, ndalimi, ndalimi ose rivendosja e kontekstit.
Për bpm
, density
, brightness
dhe scale
, nëse nuk ofrohet asnjë vlerë, modeli do të vendosë se çfarë është më e mira sipas kërkesave tuaja fillestare.
Më shumë parametra klasikë si temperature
(0.0 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ë personalizueshme në MusicGenerationConfig
.
Shkallëzimi i vlerave të numrit
Këtu janë të gjitha vlerat e shkallës që modeli mund të pranojë:
Vlera e numrit | Shkalla / Çelësi |
---|---|
C_MAJOR_A_MINOR | C maxhor / A minor |
D_FLAT_MAJOR_B_FLAT_MINOR | D♭ major / B♭ minor |
D_MAJOR_B_MINOR | D maxhor / B minor |
E_FLAT_MAJOR_C_MINOR | E♭ major / C minor |
E_MAJOR_D_FLAT_MINOR | E maxhor / C♯/D♭ minor |
F_MAJOR_D_MINOR | F maxhor / D minor |
G_FLAT_MAJOR_E_FLAT_MINOR | G♭ major / E♭ minor |
G_MAJOR_E_MINOR | G major / E minor |
A_FLAT_MAJOR_F_MINOR | A♭ major / F minor |
A_MAJOR_G_FLAT_MINOR | Major / F♯/G♭ minor |
B_FLAT_MAJOR_G_MINOR | B♭ major / G minor |
B_MAJOR_A_FLAT_MINOR | B maxhor / G♯/A♭ minor |
SCALE_UNSPECIFIED | Default / Modeli vendos |
Modeli është i aftë të drejtojë notat që luhen, por nuk bën dallimin midis tasteve relative. Kështu, çdo numër korrespondon si me madhoren relative ashtu edhe me minorin. Për shembull, C_MAJOR_A_MINOR
do të korrespondonte me të gjithë tastet e bardhë të një piano, dhe F_MAJOR_D_MINOR
do të ishin të gjithë tastet e bardhë përveç B të sheshtë.
Kufizimet
- Vetëm instrumentale: Modeli gjeneron vetëm muzikë instrumentale.
- Siguria: Kërkesat kontrollohen nga filtrat e sigurisë. Kërkesat që aktivizojnë filtrat do të shpërfillen, në këtë rast një shpjegim do të shkruhet në fushën e
filtered_prompt
të daljes. - Filigrani: Audioja e daljes është gjithmonë e filigranizuar për identifikim duke ndjekur parimet tona të AI përgjegjëse .
Çfarë është më pas
- Në vend të muzikës, mësoni se si të krijoni një bisedë me shumë altoparlantë duke përdorur modelet TTS ,
- Zbuloni se si të gjeneroni imazhe ose video ,
- Në vend të muzikës ose audios së gjeneratës, zbuloni se si Binjakët mund të kuptojnë skedarët audio ,
- Bëni një bisedë në kohë reale me Binjakët duke përdorur API-në e drejtpërdrejtë .
Eksploroni librin e gatimit për më shumë shembuj dhe udhëzime të kodit.