إنشاء الموسيقى باستخدام Lyria RealTime

باستخدام واجهة برمجة التطبيقات Gemini API وLyria RealTime، يمكنك الاستفادة من نموذج متقدم لإنشاء الموسيقى في الوقت الفعلي أثناء البث. تتيح هذه الأداة للمطوّرين إنشاء تطبيقات يمكن للمستخدمين فيها إنشاء موسيقى أدوات موسيقية بشكل تفاعلي وتوجيهها باستمرار وعزفها.

للتعرّف على المحتوى الذي يمكن إنشاؤه باستخدام Lyria RealTime، جرِّبه في AI Studio باستخدام تطبيقَي Prompt DJ أو MIDI DJ.

آلية إنشاء الموسيقى

تستخدِم ميزة Lyria RealTime لإنشاء الموسيقى اتصالاً دائمًا ثنائي الاتجاه بوقت استجابة منخفض للبث باستخدام WebSocket.

إنشاء الموسيقى والتحكّم فيها

تعمل واجهة برمجة التطبيقات Lyria RealTime بشكل مشابه لواجهة Live API، بمعنى أنّها تستخدم websockets للحفاظ على تواصل في الوقت الفعلي مع النموذج. لا تزال هذه التجربة مختلفة تمامًا لأنّه لا يمكنك التحدّث إلى النموذج و عليك استخدام تنسيق معيّن لطلب المعلومات منه.

توضّح التعليمة البرمجية التالية كيفية إنشاء الموسيقى:

Python

يُنشئ هذا المثال جلسة 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())

JavaScript

يُنشئ هذا المثال جلسة 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() لبدء الجلسة أو إيقافها مؤقتًا أو إيقافها أو إعادة ضبطها.

توجيه الموسيقى في الوقت الفعلي

Prompt 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,
    )
  )
  await session.reset_context();

JavaScript

  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 لتحديد مدى تأثير الطلبات الجديدة في عملية الإنشاء الجارية.

التفاصيل الفنية

يصف هذا القسم تفاصيل كيفية استخدام ميزة Lyria RealTime لإنشاء الموسيقى.

المواصفات

  • تنسيق الإخراج: ملف صوتي PCM بترميز 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: (قائمة بقيم ثابتة) يضبط المقياس الموسيقي (المفتاح ووضع النغمات) للإنشاء. استخدِم Scale قيم التعداد التي تقدّمها حزمة 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.

قيم التعداد على نطاق واسع

في ما يلي جميع قيم المقياس التي يمكن للنموذج قبولها:

قيمة التعداد المقياس / المفتاح
C_MAJOR_A_MINOR دو كبير / لا مينور
D_FLAT_MAJOR_B_FLAT_MINOR D♭ major / B♭ minor
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♭ major / E♭ minor
G_MAJOR_E_MINOR G major / E minor
A_FLAT_MAJOR_F_MINOR لا♭ الكبير / فا الصغير
A_MAJOR_G_FLAT_MINOR لا كبير / فا♯/صول ♭ صغير
B_FLAT_MAJOR_G_MINOR B♭ كبير / G صغير
B_MAJOR_A_FLAT_MINOR صول كبير / صول حاد/لا بلس صغرى
SCALE_UNSPECIFIED الإعداد التلقائي / يحدّد النموذج

يمكن للنموذج توجيه النغ��ات التي يتم تشغيلها، ولكنه لا يميز بين المفاتيح النسبية. وبالتالي، يتطابق كل عنصر مع كل من الإصدارين الكبير والصغير النسبيين. على سبيل المثال، يتوافق الرمز C_MAJOR_A_MINOR مع كل المفاتيح البيضاء في البيانو، ويتوافق الرمز F_MAJOR_D_MINOR مع كل المفاتيح البيضاء باستثناء B flat.

القيود

  • موسيقى بدون غناء: ينشئ النموذج موسيقى بدون غناء فقط.
  • الأمان: يتم التحقّق من الطلبات من خلال فلاتر الأمان. سيتم تجاهل الطلبات التي تؤدي إلى تنشيط الفلاتر، وفي هذه الحالة سيتم كتابة تفسير في حقل filtered_prompt الخاص بالإخراج.
  • وضع العلامات المائية: يتم دائمًا وضع علامة مائية على الملف الصوتي الناتج للتعرّف عليه وفقًا لمبادئ الذكاء الاصطناعي المسؤول.

الخطوات التالية

اطّلِع على كتاب الطبخ للاطّلا�� على المزيد من أمثلة الرموز البرمجية والأدلة التعليمية.