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

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

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

لتجربة إمكانات Lyria RealTime، يمكنك استخدامها في AI Studio من خلال تطبيقَي Prompt DJ أو MIDI DJ.

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

تعمل 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(http_options={'api_version': 'v1beta'})

  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";
import Speaker from "speaker";
import { Buffer } from "buffer";

const client = new GoogleGenAI({
  apiKey: GEMINI_API_KEY,
    apiVersion: "v1beta" ,
});

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

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

يمكنك توجيه عملية إنشاء الموسيقى في الوقت الفعلي من خلال إرسال طلبات وتعديل معلمات الإنشاء في الوقت الفعلي.

ليريا الفورية في الوقت الحقيقي

أثناء البث المباشر، يمكنك إرسال رسائل WeightedPrompt جديدة في أي وقت لتغيير الموسيقى التي تم إنشاؤها. سينتقل النموذج بسلاسة بناءً على المدخلات الجديدة.

يجب أن تتّبع الطلبات التنسيق الصحيح مع text (الطلب الفعلي) وweight. يمكن أن تأخذ weight أي قيمة باستثناء 0. 1.0 هي عادةً نقطة بداية جيدة.

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

يُرجى العِلم أنّ عمليات الانتقال بين النماذج يمكن أن تكون مفاجئة بعض الشيء عند تغيير الطلبات بشكل كبير، لذا يُنصح بتنفيذ نوع من التلاشي التدريجي من خلال إرسال قيم أوزان وسيطة إلى النموذج.

تعديل الإعداد

يمكنك توجيه عملية إنشاء الموسيقى من خلال تعديل مَعلمات إنشاء الموسيقى في الوقت الفعلي. لا يمكنك تحديث أحد المعلمات فقط، بل تحتاج إلى ضبط التكوين بأكمله وإلا ستتم إعادة تعيين الحقول الأخرى إلى قيمها الافتراضية.

بما أنّ تعديل عدد النبضات في الدقيقة أو المقياس الموسيقي هو تغيير جذري للنموذج، عليك أيضًا إخباره بإعادة ضبط السياق باستخدام reset_context() ليأخذ الإعداد الجديد في الاعتبار. لن يؤدي ذلك إلى إيقاف البث، ولكن سيكون الانتقال صعبًا. ليس عليك إجراء ذلك للمعلمات الأخرى.

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

دليل استخدام برنامج 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.

المواصفات

  • تنسيق الإخراج: ملف صوتي PCM خام 16 بت
  • معدّل البيانات في الملف الصوتي: 48 كيلوهرتز
  • القنوات: 2 (استيريو)

عناصر التحكّم

يمكن التأثير في إنشاء الموسيقى في الوقت الفعلي من خلال إرسال رسائل تحتوي على:

  • WeightedPrompt: سلسلة نصية تصف فكرة موسيقية أو نوعًا موسيقيًا أو آلة موسيقية أو حالة مزاجية أو سمة. يمكن تقديم طلبات متعدّدة لدمج التأثيرات. راجِع ما ورد أعلاه لمزيد من التفاصيل حول أفضل طريقة لتقديم الطلبات إلى Lyria RealTime.
  • MusicGenerationConfig: إعدادات عملية إنشاء الموسيقى، ما يؤثر في خصائص الصوت الناتج. تشمل المَعلمات ما يلي:
    • guidance: (عدد عشري) النطاق: [0.0, 6.0] القيمة التلقائية: 4.0 يتحكّم هذا الإعداد في مدى التزام النموذج بالطلبات. تؤدي زيادة مستوى التوجيه إلى تحسين الالتزام بالطلب، ولكنها تجعل الانتقالات أكثر حدة.
    • bpm: (عدد صحيح) النطاق: [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 توجيه النموذج لمحاولة إخراج صوت الباس والطبول فقط
    • music_generation_mode: (تعداد) تُعلم هذه السمة النموذج ما إذا كان يجب التركيز على QUALITY (القيمة التلقائية) أو DIVERSITY من المحتوى الموسيقي. يمكن أيضًا ضبطها على VOCALIZATION للسماح للنموذج بإنشاء أصوات كآلة موسيقية أخرى (إضافتها كطلبات جديدة).
  • 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♭ major / C minor
E_MAJOR_D_FLAT_MINOR مفتاح E الرئيسي / C♯/D♭ ثانوي
F_MAJOR_D_MINOR فا الكبير / ري الصغير
G_FLAT_MAJOR_E_FLAT_MINOR G♭ major / E♭ minor
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 B major / G♯/A♭ minor
SCALE_UNSPECIFIED الوضع الافتراضي / يحدد النموذج

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

القيود

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

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

يمكنك استكشاف كتاب الطبخ للحصول على المزيد من الأمثلة والبرامج التعليمية حول الرموز البرمجية.