Gjenerimi i muzikës duke përdorur Lyria RealTime

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ë WeightedPrompt pë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ë Scale të 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 te QUALITY (vlera parazgjedhur) apo DIVERSITY i muzikës. Mund të vendoset gjithashtu në VOCALIZATION pë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_prompt të 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.