تولید موسیقی با استفاده از Lyria RealTime

Gemini API، با استفاده از Lyria RealTime ، دسترسی به یک مدل تولید موسیقی جریانی و پیشرفته را فراهم می‌کند. این به توسعه دهندگان اجازه می دهد تا برنامه هایی بسازند که در آن کاربران بتوانند به طور تعاملی ایجاد کنند، به طور پیوسته هدایت کنند و موسیقی دستگاهی را اجرا کنند.

برای تجربه آنچه می توان با ا��ت��اده از Lyria RealTime ساخت، آن را در AI Studio با استفاده از Prompt DJ یا برنامه های MIDI DJ امتحان کنید!

نحوه عملکرد نسل موسیقی

تولید موسیقی RealTime Lyria با استفاده از WebSocket از اتصال جریان مداوم، دو طرفه و با تاخیر کم استفاده می کند.

تولید و کنترل موسیقی

Lyria RealTime تا حدودی شبیه Live API عمل می کند به این معنا که از وب سوکت ها برای برقراری ارتباط بلادرنگ با مدل استفاده می کند. هنوز دقیقاً یکسان نیست زیرا نمی توانید با مدل صحبت کنید و باید از یک قالب خاص برای درخواست آن استفاده کنید.

کد زیر نحوه تولید موسیقی را نشان می دهد:

پایتون

این مثال جلسه Lyria RealTime را با استفاده از client.aio.live.music.connect() مقداردهی می کند، سپس یک دستور اولیه با 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(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())

جاوا اسکریپت

این مثال جلسه Lyria RealTime را با استفاده از client.live.music.connect() مقداردهی می‌کند، سپس یک دستور اولیه با session.setWeightedPrompts() همراه با پیکربندی اولیه با استفاده از session.setMusicGenerationConfig ارسال می‌کند، تولید موسیقی را با استفاده از session.play() شروع می��کند و یک پاسخ تماس onMessage برای پردازش صداها تنظیم می‌کند.

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

سپس می توانید از session.play() ، session.pause() ، session.stop() و session.reset_context() برای شروع، توقف، توقف یا تنظیم مجدد جلسه استفاده کنید.

موسیقی را در زمان واقعی هدایت کنید

درخواست Lyria RealTime

در حالی که جریان فعال است، می‌توانید در هر زمان پیام‌های WeightedPrompt جدیدی ارسال کنید تا موسیقی تولید شده را تغییر دهید. مدل به آرامی بر اساس ورودی جدید تغییر خواهد کرد.

درخواست‌ها باید فرمت مناسب را با یک text (اعلان واقعی) و weight دنبال کنند. weight می تواند هر مقداری به جز 0 داشته باشد. 1.0 معمولا نقطه شروع خوبی است.

پایتون

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

جاوا اسکریپت

  await session.setMusicGenerationConfig({
    weightedPrompts: [
      { text: 'Harmonica', weight: 0.3 },
      { text: 'Afrobeat', weight: 0.7 }
    ],
  });

توجه داشته باشید که هنگام تغییر شدید دستورات، انتقال مدل می‌تواند کمی ناگهانی باشد، بنابراین توصیه می‌شود با ارسال مقادیر وزن میانی به مدل، نوعی از محو شدن متقاطع اعمال شود.

پیکربندی را به روز کنید

همچنین می توانید پارامترهای تولید موسیقی را در زمان واقعی به روز کنید. شما نمی توانید فقط یک پارامتر را به روز کنید، باید کل پیکربندی را تنظیم کنید در غیر این صورت سایر فیلدها به مقادیر پیش فرض خود بازنشانی می شوند.

از آنجایی که به‌روزرسانی bpm یا مقیاس یک تغییر اساسی برای مدل است، باید به آن بگویید که با استفاده از reset_context() زمینه خود را بازنشانی کند تا پیکربندی جدید را در نظر بگیرد. این جریان را متوقف نمی کند، اما یک انتقال سخت خواهد بود. برای سایر پارامترها لازم نیست این کار را انجام دهید.

پایتون

  await session.set_music_generation_config(
    config=types.LiveMusicGenerationConfig(
      bpm=128,
      scale=types.Scale.D_MAJOR_B_MINOR,
    )
  )
  await session.reset_context();

جاوا اسکریپت

  await session.setMusicGenerationConfig({
    musicGenerationConfig: { bpm: 120, density: 0.75 },
  });
  await session.reset_context();

راهنمای سریع برای Lyria RealTime

در اینجا یک لیست غیر جامع از دستورات وجود دارد که می توانید از آنها برای درخواست Lyria RealTime استفاده کنید:

  • سازها: 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 آزمایش کنید تا بر میزان تأثیر یک اعلان جدید بر نسل در حال انجام تأثیر بگذارید.

جزئیات فنی

این بخش ویژگی های نحوه استفاده از تولید موسیقی RealTime Lyria را شرح می دهد.

مشخصات

  • فرمت خروجی: صوتی PCM 16 بیتی خام
  • سرعت نمونه برداری: 48 کیلوهرتز
  • کانال: 2 (استریو)

کنترل ها

تولید موسیقی را می‌توان در زمان واقعی با ارسال پیام‌هایی تحت تأثیر قرار داد:

  • WeightedPrompt : رشته متنی که یک ایده موسیقی، ژانر، ساز، حالت، یا ویژگی را توصیف می کند. به طور بالقوه می توان چندین فرمان برای ترکیب تأثیرات ارائه داد. برای جزئیات بیشتر در مورد نحوه بهترین درخواست Lyria RealTime به بالا مراجعه کنید.
  • MusicGenerationConfig : پیکربندی برای فرآیند تولید موسیقی که بر ویژگی های صدای خروجی تأثیر می گذارد.). پارامترها عبارتند از:
    • guidance : (شناور) محدوده: [0.0, 6.0] . پیش فرض: 4.0 کنترل می کند که مدل چقدر از دستورات پیروی می کند. راهنمایی بالاتر، پایبندی به اعلان را بهبود می بخشد، اما انتقال را ناگهانی تر می کند.
    • bpm : (int) محدوده: [60, 200] . ضربان در دقیقه را برای موسیقی تولید شده تنظیم می کند. شما باید متن را برای مدلی که با در نظر گرفتن bpm جدید در نظر گرفته است متوقف کنید/باز کنید یا تنظیم مجدد کنید.
    • density : (شناور) محدوده: [0.0, 1.0] . تراکم نت ها / صداهای موسیقی را کنترل می کند. ارزش‌های پایین‌تر موسیقی پراکن��ه‌تری ��ولید می‌کنند. ارزش‌های بالاتر موسیقی «مشغول‌تری» تولید می‌کند.
    • brightness : (شناور) محدوده: [0.0, 1.0] . کیفیت تونال را تنظیم می کند. مقادیر بالاتر صدایی «روشن‌تر» تولید می‌کنند که عموماً بر فرکانس‌های بالاتر تأکید دارند.
    • scale : (Enum) مقیاس موسیقی (کلید و حالت) را برای نسل تنظیم می کند. از مقادیر Scale enum ارائه شده توسط SDK استفاده کنید. شما باید متن را برای مدلی که مقیاس جدید را در نظر می‌گیرد متوقف کنید/ پخش کنید یا بازنشانی کنید.
    • mute_bass : (bool) پیش‌فرض: False . کنترل می کند که آیا مدل باس خروجی را کاهش می دهد یا خیر.
    • mute_drums : (bool) پیش فرض: False . کنترل می کند که آیا خروجی های مدل درام های خروجی را کاهش می دهد یا خیر.
    • only_bass_and_drums : (bool) پیش فرض: False . مدل را طوری هدایت کنید که سعی کنید فقط باس و درام را تولید کنید.
  • PlaybackControl : فرمان هایی برای کنترل جنبه های پخش، مانند پخش، مکث، توقف یا بازنشانی زمینه.

برای bpm ، density ، brightness و scale ، اگر مقداری ارائه نشود، مدل با توجه به درخواست‌های اولیه شما بهترین را انتخاب می‌کند.

پارامترهای کلاسیک بیشتری مانند temperature (0.0 تا 3.0، پیش‌فرض 1.1)، top_k (1 تا 1000، پیش‌فرض 40)، و seed (0 تا 2 147 483 647، به‌طور پیش‌فرض به‌طور تصادفی انتخاب می‌شوند) نیز در MusicGenerationConfig قابل تنظیم هستند.

مقیاس مقادیر Enum

در اینجا تمام مقادیر مقیاسی که مدل می تواند بپذیرد آمده است:

مقدار Enum مقیاس / کلید
C_MAJOR_A_MINOR سی ماژور / مینور
D_FLAT_MAJOR_B_FLAT_MINOR D♭ ماژور / B♭ جزئی
D_MAJOR_B_MINOR د ماژور / ب مینور
E_FLAT_MAJOR_C_MINOR ای♭ ماژور / سی مینور
E_MAJOR_D_FLAT_MINOR ای ماژور / C♯/D♭ مینور
F_MAJOR_D_MINOR فا ماژور / د مینور
G_FLAT_MAJOR_E_FLAT_MINOR G♭ ماژور / E♭ مینور
G_MAJOR_E_MINOR جی ماژور / ای مینور
A_FLAT_MAJOR_F_MINOR A♭ ماژور / فا مینور
A_MAJOR_G_FLAT_MINOR یک ماژور / F♯/G♭ مینور
B_FLAT_MAJOR_G_MINOR ب♭ ماژور / جی مینور
B_MAJOR_A_FLAT_MINOR ب ماژور / G♯/A♭ مینور
SCALE_UNSPECIFIED پیش فرض / مدل تصمیم می گیرد

این مدل قادر به هدایت نت های نواخته شده است، اما بین کلیدهای نسبی تمایز قائل نمی شود. بنابراین هر enum هم با بزرگ و هم جزئی نسبی مطابقت دارد. برای مثال، C_MAJOR_A_MINOR به تمام کلیدهای سفید یک پیانو مطابقت دارد و F_MAJOR_D_MINOR همه کلیدهای سفید به جز B مسطح خواهد بود.

محدودیت ها

  • فقط دستگاهی: این مدل فقط موسیقی دستگاهی تولید می کند.
  • ایمنی: درخواست ها توسط فیلترهای ایمنی بررسی می شوند. درخواست‌هایی که فیلترها را فعال می‌کنند نادیده گرفته می‌شوند که در این صورت توضیحی در قسمت filtered_prompt خروجی نوشته می‌شود.
  • واترمارک: صدای خروجی همیشه برای شناسایی با رعایت اصول هوش مصنوعی مسئول ما واترمارک می شود.

بعدش چی

  • به جای موسیقی، یاد بگیرید که چگونه مکالمه چند بلندگو را با استفاده از مدل‌های TTS ایجاد کنید.
  • نحوه تولید تصاویر یا ویدیوها را کشف کنید،
  • به جای تولید موسیقی یا صدا، دریابید که چگونه Gemini می تواند فایل های صوتی را درک کند ،
  • با استفاده از Live API یک مکالمه بی‌درنگ با Gemini داشته باشید.

برای مثال‌های کد و آموزش‌های بیشتر، کتاب آشپزی را کاوش کنید.