تتيح واجهة Gemini API، التي تستخدم Lyria RealTime، الوصول إلى نموذج متطوّر لإنشاء الموسيقى وبثها في الوقت الفعلي. تتيح هذه الحزمة للمطوّرين إنشاء تطبيقات يمكن للمستخدمين من خلالها إنشاء موسيقى آلية بشكل تفاعلي وتوجيهها باستمرار وتشغيلها.
لتجربة ما يمكن إنشاؤه باستخدام Lyria RealTime، يمكنك استخدامها في AI Studio من خلال تطبيقَي Prompt DJ أو MIDI DJ.
طريقة عمل ميزة "إنشاء الموسيقى"
تستخدم ميزة "إنشاء الموسيقى في الوقت الفعلي" من Lyria اتصالاً دائمًا وثنائي الاتجاه وبمعدل تأخير منخفض للبث المباشر باستخدام WebSocket.
إنشاء الموسيقى والتحكّم فيها
تعمل Lyria RealTime بشكل مشابه Live API من حيث أنّها تستخدم مقابس الويب للحفاظ على التواصل في الوقت الفعلي مع النموذج. مع ذلك، لا يزال يختلف عن النموذج الأصلي لأنّه لا يمكنك التحدّث إليه، وعليك استخدام تنسيق محدّد لتقديم الطلب.
توضّح التعليمة البرمجية التالية كيفية إنشاء موسيقى:
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': '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";
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()
لبدء الجلسة أو إيقافها مؤقتًا أو إيقافها أو إعادة ضبطها.
توجيه الموسيقى في الوقت الفعلي
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,
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 إلى 2147483647، يتم اختيارها عشوائيًا تلقائيًا) في 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_MAJOR_G_FLAT_MINOR |
لا يوجد مفتاح رئيسي / فا♯/صول♭ صغير |
B_FLAT_MAJOR_G_MINOR |
B♭ major / G minor |
B_MAJOR_A_FLAT_MINOR |
مفتاح B الكبير / مفتاح G♯/A♭ الصغير |
SCALE_UNSPECIFIED |
تلقائي / يقرّر النموذج |
يمكن للنموذج توجيه النوتات التي يتم تشغيلها، ولكنّه لا يميّز بين المفاتيح النسبية. وبالتالي، يتوافق كل تعداد مع كل من الرقمين الرئيسي والثانوي النسبيين. على سبيل المثال، يتوافق C_MAJOR_A_MINOR
مع جميع مفاتيح البيانو البيضاء، ويتوافق F_MAJOR_D_MINOR
مع جميع مفاتيح البيانو البيضاء باستثناء المفتاح B المسطّح.
القيود
- موسيقى آلية فقط: ينشئ النموذج موسيقى آلية فقط.
- الأمان: يتم فحص الطلبات من خلال فلاتر الأمان. سيتم تجاهل الطلبات التي تؤدي إلى تشغيل الفلاتر، وفي هذه الحالة، سيتم كتابة توضيح في الحقل
filtered_prompt
في الناتج. - وضع العلامات المائية: يتم دائمًا وضع علامات مائية على الصوت الناتج لتحديد مصدره، وذلك وفقًا لمبادئ الذكاء الاصطناعي المسؤول.
الخطوات التالية
- بدلاً من الموسيقى، تعرَّف على كيفية إنشاء محادثة بين عدة متحدثين باستخدام نماذج تحويل النص إلى كلام.
- تعرَّف على كيفية إنشاء صور أو فيديوهات.
- بدلاً من إنشاء موسيقى أو محتوى صوتي، تعرَّف على كيفية فهم Gemini للملفات الصوتية.
- إجراء محادثة في الوقت الفعلي مع Gemini باستخدام Live API
يمكنك استكشاف كتاب الطبخ للحصول على المزيد من الأمثلة والبرامج التعليمية حول الرموز البرمجية.