Lyria RealTime का इस्तेमाल करके संगीत जनरेट करना

Gemini API, Lyria RealTime का इस्तेमाल करके, रीयल-टाइम में संगीत जनरेट करने वाले बेहतरीन मॉडल का ऐक्सेस देता है. इसकी मदद से डेवलपर ऐसे ऐप्लिकेशन बना सकते हैं जिनमें उपयोगकर्ता इंटरैक्टिव तरीके से संगीत बना सकते हैं, उसे लगातार चला सकते हैं, और वाद्य संगीत बना सकते हैं.

Lyria RealTime की मदद से क्या-क्या बनाया जा सकता है, यह जानने के लिए इसे AI Studio पर आज़माएं. इसके लिए, प्रॉम्प्ट डीजे या मिडी डीजे ऐप्लिकेशन का इस्तेमाल करें!

संगीत जनरेट करने की सुविधा कैसे काम करती है

Lyria RealTime, संगीत जनरेट करने के लिए WebSocket का इस्तेमाल करता है. यह एक ऐसा कनेक्शन होता है जो लगातार काम करता है, दोनों दिशाओं में डेटा ट्रांसफ़र करता है, और जिसमें डेटा ट्रांसफ़र में कम समय लगता है.

संगीत जनरेट करना और उसे कंट्रोल करना

Lyria RealTime, Live API की तरह काम करता है. यह मॉडल के साथ रीयल-टाइम कम्यूनिकेशन बनाए रखने के लिए, वेबसॉकेट का इस्तेमाल करता है. यह अब भी पूरी तरह से वैसा नहीं है, क्योंकि मॉडल से बात नहीं की जा सकती. साथ ही, आपको मॉडल को प्रॉम्प्ट देने के लिए किसी खास फ़ॉर्मैट का इस्तेमाल करना होगा.

नीचे दिए गए कोड में, संगीत जनरेट करने का तरीका बताया गया है:

Python

इस उदाहरण में, client.aio.live.music.connect() का इस्तेमाल करके Lyria RealTime सेशन को शुरू किया गया है. इसके बाद, session.set_weighted_prompts() के साथ शुरुआती प्रॉम्प्ट भेजा गया है. साथ ही, session.set_music_generation_config का इस्तेमाल करके शुरुआती कॉन्फ़िगरेशन भेजा गया है. इसके बाद, session.play() का इस्तेमाल करके संगीत जनरेट करने की प्रोसेस शुरू की गई है. साथ ही, receive_audio() को सेट अप किया गया है, ताकि यह मिले हुए ऑडियो चंक को प्रोसेस कर सके.

  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

इस उदाहरण में, client.live.music.connect() का इस्तेमाल करके Lyria RealTime सेशन को शुरू किया गया है. इसके बाद, session.setWeightedPrompts() के साथ शुरुआती प्रॉम्प्ट भेजा गया है. साथ ही, session.setMusicGenerationConfig का इस्तेमाल करके शुरुआती कॉन्फ़िगरेशन भेजा गया है. इसके बाद, session.play() का इस्तेमाल करके संगीत जनरेट करने की सुविधा शुरू की गई है. साथ ही, onMessage कॉलबैक सेट अप किया गया है, ताकि उसे मिलने वाले ऑडियो चंक को प्रोसेस किया जा सके.

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);

इसके बाद, सेशन को शुरू करने, रोकने, बंद करने या रीसेट करने के लिए, session.play(), session.pause(), session.stop(), और session.reset_context() का इस्तेमाल किया जा सकता है.

रीयल टाइम में संगीत को कंट्रोल करना

Lyria RealTime को प्रॉम्प्ट करना

स्ट्रीम चालू रहने के दौरान, जनरेट किए गए संगीत को बदलने के लिए, किसी भी समय नए WeightedPrompt मैसेज भेजे जा सकते हैं. मॉडल, नए इनपुट के आधार पर आसानी से ट्रांज़िशन करेगा.

प्रॉम्प्ट सही फ़ॉर्मैट में होने चाहिए. इनमें text (असल प्रॉम्प्ट) और weight शामिल होना चाहिए. weight में 0 को छोड़कर कोई भी वैल्यू हो सकती है. 1.0 से शुरुआत करना आम तौर पर अच्छा होता है.

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 }
    ],
  });

ध्यान दें कि प्रॉम्प्ट में अचानक बदलाव करने पर, मॉडल ट्रांज़िशन में कुछ समय लग सकता है. इसलिए, हमारा सुझाव है कि मॉडल को इंटरमीडिएट वेट वैल्यू भेजकर, किसी तरह का क्रॉस-फ़ेडिंग लागू करें.

कॉन्फ़िगरेशन अपडेट करना

संगीत जनरेट करने के पैरामीटर को रीयल टाइम में भी अपडेट किया जा सकता है. सिर्फ़ किसी पैरामीटर को अपडेट नहीं किया जा सकता. आपको पूरा कॉन्फ़िगरेशन सेट करना होगा. ऐसा न करने पर, अन्य फ़ील्ड अपनी डिफ़ॉल्ट वैल्यू पर रीसेट हो जाएंगे.

बीपीएम या स्केल को अपडेट करने से, मॉडल में काफ़ी बदलाव होता है. इसलिए, आपको मॉडल को यह भी बताना होगा कि वह reset_context() का इस्तेमाल करके अपने कॉन्टेक्स्ट को रीसेट करे, ताकि नई कॉन्फ़िगरेशन को ध्यान में रखा जा सके. इससे स्ट्रीम बंद नहीं होगी, लेकिन यह एक मुश्किल ट्रांज़िशन होगा. आपको अन्य पैरामीटर के लिए ऐसा करने की ज़रूरत नहीं है.

Python

  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();

Lyria RealTime के लिए प्रॉम्प्ट गाइड

यहां ऐसे प्रॉम्प्ट की सूची दी गई है जिनका इस्तेमाल करके, 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, ...
  • संगीत की शैली: 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, ...
  • मूड/ब्यौरा: 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, ...

ये सिर्फ़ कुछ उदाहरण हैं. Lyria RealTime और भी बहुत कुछ कर सकता है. अपने प्रॉम्प्ट के साथ एक्सपेरिमेंट करें!

सबसे सही तरीके

  • क्लाइंट ऐप्लिकेशन में, ऑडियो बफ़रिंग की सुविधा को बेहतर तरीके से लागू किया जाना चाहिए, ताकि ऑडियो को बिना किसी रुकावट के चलाया जा सके. इससे नेटवर्क की वजह से होने वाली रुकावट और जनरेशन में लगने वाले समय में मामूली अंतर का पता लगाने में मदद मिलती है.
  • असरदार प्रॉम्प्ट:
    • ब्यौरा दें. मूड, शैली, और इंस्ट्रुमेंट के बारे में बताने वाले विशेषणों का इस्तेमाल करें.
    • धीरे-धीरे बदलाव करें और आगे बढ़ें. प्रॉम्प्ट को पूरी तरह से बदलने के बजाय, संगीत को ज़्यादा आसानी से बदलने के लिए, उसमें एलिमेंट जोड़ें या उनमें बदलाव करें.
    • WeightedPrompt पर वेट की वैल्यू बदलकर देखें. इससे यह तय करने में मदद मिलती है कि नया प्रॉम्प्ट, मौजूदा जनरेशन पर कितना असर डालेगा.

तकनीकी जानकारी

इस सेक्शन में, Lyria RealTime की संगीत जनरेट करने की सुविधा को इस्तेमाल करने के बारे में खास जानकारी दी गई है.

विशेषताएं

  • आउटपुट फ़ॉर्मैट: रॉ 16-बिट पीसीएम ऑडियो
  • सैंपल रेट: 48 किलोहर्ट्ज़
  • चैनल: 2 (स्टीरियो)

कंट्रोल

मैसेज भेजकर, संगीत जनरेट करने की सुविधा को रीयल टाइम में कंट्रोल किया जा सकता है. मैसेज में ये चीज़ें शामिल होनी चाहिए:

  • WeightedPrompt: यह एक टेक्स्ट स्ट्रिंग होती है, जिसमें संगीत से जुड़े किसी आइडिया, शैली, वाद्य यंत्र, मूड या विशेषता के बारे में बताया जाता है. अलग-अलग स्टाइल में इमेज जनरेट करने के लिए, एक से ज़्यादा प्रॉम्प्ट दिए जा सकते हैं. Lyria RealTime को बेहतर तरीके से प्रॉम्प्ट करने के बारे में ज़्यादा जानने के लिए, ऊपर देखें.
  • MusicGenerationConfig: संगीत जनरेट करने की प्रोसेस के लिए कॉन्फ़िगरेशन. इससे आउटपुट ऑडियो की विशेषताओं पर असर पड़ता है. पैरामीटर शामिल हैं:
    • guidance: (फ़्लोट) रेंज: [0.0, 6.0]. डिफ़ॉल्ट: 4.0. इससे यह कंट्रोल किया जाता है कि मॉडल, प्रॉम्प्ट का कितनी सख्ती से पालन करे. ज़्यादा गाइडेंस से, प्रॉम्प्ट के हिसाब से बेहतर नतीजे मिलते हैं. हालांकि, इससे ट्रांज़िशन ज़्यादा अचानक होते हैं.
    • bpm: (int) रेंज: [60, 200]. इससे जनरेट किए गए संगीत के लिए, बीट प्रति मिनट की संख्या सेट की जाती है. आपको मॉडल के लिए कॉन्टेक्स्ट को रोकना/चलाना या रीसेट करना होगा, ताकि वह नए बीपीएम को ध्यान में रख सके.
    • density: (फ़्लोट) रेंज: [0.0, 1.0]. इससे म्यूज़िकल नोट/आवाज़ की डेंसिटी को कंट्रोल किया जाता है. कम वैल्यू से, कम म्यूज़िक जनरेट होता है. वहीं, ज़्यादा वैल्यू से "ज़्यादा" म्यूज़िक जनरेट होता है.
    • brightness: (फ़्लोट) रेंज: [0.0, 1.0]. इससे टोनल क्वालिटी को अडजस्ट किया जाता है. ज़्यादा वैल्यू से, ऑडियो "ज़्यादा तेज़" सुनाई देता है. आम तौर पर, इससे ज़्यादा फ़्रीक्वेंसी पर ज़ोर दिया जाता है.
    • scale: (Enum) इससे जनरेट किए जाने वाले संगीत के लिए म्यूज़िकल स्केल (की और मोड) सेट किया जाता है. SDK टूल की ओर से दिए गए Scale enum वैल्यू का इस्तेमाल करें. आपको मॉडल के लिए कॉन्टेक्स्ट को रोकना/चलाना या रीसेट करना होगा, ताकि वह नए स्केल को ध्यान में रख सके.
    • mute_bass: (bool) डिफ़ॉल्ट: False. इस विकल्प से यह कंट्रोल किया जाता है कि मॉडल, आउटपुट में बेस को कम करे या नहीं.
    • mute_drums: (bool) डिफ़ॉल्ट: False. इस विकल्प से यह कंट्रोल किया जाता है कि मॉडल के आउटपुट में ड्रम की आवाज़ कम हो या नहीं.
    • only_bass_and_drums: (bool) डिफ़ॉल्ट: False. मॉडल को सिर्फ़ बास और ड्रम का आउटपुट देने के लिए निर्देश दें.
    • music_generation_mode: (Enum) इससे मॉडल को यह पता चलता है कि उसे संगीत के QUALITY (डिफ़ॉल्ट वैल्यू) या DIVERSITY पर फ़ोकस करना चाहिए. इसे VOCALIZATION पर भी सेट किया जा सकता है, ताकि मॉडल किसी दूसरे इंस्ट्रुमेंट के तौर पर आवाज़ें जनरेट कर सके. इसके लिए, उन्हें नए प्रॉम्प्ट के तौर पर जोड़ें.
  • PlaybackControl: प्लेबैक को कंट्रोल करने के लिए निर्देश. जैसे, चलाना, रोकना, बंद करना या कॉन्टेक्स्ट रीसेट करना.

bpm, density, brightness, और scale के लिए, अगर कोई वैल्यू नहीं दी जाती है, तो मॉडल आपके शुरुआती प्रॉम्प्ट के हिसाब से सबसे सही वैल्यू तय करेगा.

MusicGenerationConfig में, temperature (0.0 से 3.0, डिफ़ॉल्ट रूप से 1.1), top_k (1 से 1000, डिफ़ॉल्ट रूप से 40), और seed (0 से 2,147,483,647, डिफ़ॉल्ट रूप से रैंडम तरीके से चुना जाता है) जैसे ज़्यादा क्लासिकल पैरामीटर भी पसंद के मुताबिक बनाए जा सकते हैं.

स्केल Enum वैल्यू

यहां स्केल की वे सभी वैल्यू दी गई हैं जिन्हें मॉडल स्वीकार कर सकता है:

Enum वैल्यू स्केल / कुंजी
C_MAJOR_A_MINOR सी मेजर / ए माइनर
D_FLAT_MAJOR_B_FLAT_MINOR D♭ मेजर / B♭ माइनर
D_MAJOR_B_MINOR D major / B minor
E_FLAT_MAJOR_C_MINOR E♭ मेजर / C माइनर
E_MAJOR_D_FLAT_MINOR E major / C♯/D♭ minor
F_MAJOR_D_MINOR एफ़ मेजर / डी माइनर
G_FLAT_MAJOR_E_FLAT_MINOR G♭ मेजर / E♭ माइनर
G_MAJOR_E_MINOR जी मेजर / ई माइनर
A_FLAT_MAJOR_F_MINOR A♭ मेजर / F माइनर
A_MAJOR_G_FLAT_MINOR ए मेजर / एफ़♯/जी♭ माइनर
B_FLAT_MAJOR_G_MINOR B♭ मेजर / G माइनर
B_MAJOR_A_FLAT_MINOR बी मेजर / जी♯/ए♭ माइनर
SCALE_UNSPECIFIED डिफ़ॉल्ट / मॉडल तय करता है

यह मॉडल, बजाए जाने वाले नोट के बारे में जानकारी दे सकता है. हालांकि, यह रिलेटिव की के बीच अंतर नहीं कर सकता. इसलिए, हर enum, रिलेटिव मेजर और माइनर, दोनों से मेल खाता है. उदाहरण के लिए, C_MAJOR_A_MINOR का मतलब पियानो की सभी सफ़ेद कुंजियां होंगी और F_MAJOR_D_MINOR का मतलब बी फ़्लैट को छोड़कर सभी सफ़ेद कुंजियां होंगी.

सीमाएं

  • सिर्फ़ इंस्ट्रुमेंटल संगीत: मॉडल सिर्फ़ इंस्ट्रुमेंटल संगीत जनरेट करता है.
  • सुरक्षा: प्रॉम्प्ट की जांच, सुरक्षा फ़िल्टर करते हैं. फ़िल्टर को ट्रिगर करने वाले प्रॉम्प्ट को अनदेखा कर दिया जाएगा. ऐसे मामले में, आउटपुट के filtered_prompt फ़ील्ड में इसकी वजह बताई जाएगी.
  • वॉटरमार्किंग: आउटपुट ऑडियो को हमेशा वॉटरमार्क किया जाता है, ताकि उसकी पहचान की जा सके. ऐसा ज़िम्मेदारी के साथ एआई का इस्तेमाल करने से जुड़े सिद्धांतों के तहत किया जाता है.

आगे क्या करना है

  • संगीत के बजाय, टीटीएस मॉडल का इस्तेमाल करके, एक से ज़्यादा स्पीकर की आवाज़ में बातचीत जनरेट करने का तरीका जानें,
  • इमेज या वीडियो जनरेट करने का तरीका जानें,
  • संगीत या ऑडियो जनरेट करने के बजाय, जानें कि Gemini कैसे ऑडियो फ़ाइलें समझ सकता है,
  • Live API का इस्तेमाल करके, Gemini के साथ रीयल-टाइम में बातचीत करें.

कोड के ज़्यादा उदाहरणों और ट्यूटोरियल के लिए, कुकिंग बुक देखें.