Gjenerimi i muzikës duke përdorur Lyria RealTime

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 vlerat Scale 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

Eksploroni librin e gatimit për më shumë shembuj dhe udhëzime të kodit.