ממשק Gemini API, באמצעות Lyria RealTime, מספק גישה למודל מתקדם ליצירת מוזיקה בסטרימינג בזמן אמת. היא מאפשרת למפתחים ליצור אפליקציות שבהן המשתמשים יכולים ליצור מוזיקה אינסטרומנטלית באופן אינטראקטיבי, לכוון אותה באופן רציף ולבצע אותה.
כדי לחוות את האפשרויות של Lyria RealTime, אתם יכולים לנסות אותו ב-AI Studio באמצעות האפליקציות Prompt DJ או MIDI DJ.
איך פועל יצירת מוזיקה
התכונה 'יצירת מוזיקה בזמן אמת' של Lyria משתמשת בחיבור סטרימינג מתמשך, דו-כיווני ועם השהיה נמוכה באמצעות 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(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
מגדירה קריאה חוזרת (callback) כדי לעבד את נתוני האודיו שהיא מקבלת.
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 }
],
});
שימו לב: המעברים בין המודלים יכולים להיות קצת פתאומיים כשמשנים את ההנחיות באופן קיצוני, ולכן מומלץ להטמיע מעין מעבר הדרגתי בין המודלים על ידי שליחת ערכי משקל ביניים למודל.
עדכון ההגדרות
אפשר גם לעדכן את הפרמטרים של יצירת המוזיקה בזמן אמת. אי אפשר רק לעדכן פרמטר, צריך להגדיר את כל התצורה. אחרת, שדות אחרים יאופסו לערכי ברירת המחדל שלהם.
עדכון של ה-BPM או של הסולם הוא שינוי משמעותי במודל, ולכן צריך גם לאפס את ההקשר שלו באמצעות 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 RealTime ליצירת מוזיקה.
מפרטים
- פורמט פלט: אודיו PCM גולמי של 16 ביט
- תדירות הדגימה: 48kHz
- ערוצים: 2 (סטריאו)
פקדים
אפשר להשפיע על יצירת המוזיקה בזמן אמת על ידי שליחת הודעות שמכילות:
-
WeightedPrompt
: מחרוזת טקסט שמתארת רעיון מוזיקלי, ז'אנר, כלי נגינה, מצב רוח או מאפיין. אפשר לספק כמה הנחיות כדי לשלב השפעות. למעלה מופיעים פרטים נוספים על הדרך הטובה ביותר להנחות את Lyria RealTime. -
MusicGenerationConfig
: הגדרה של תהליך יצירת המוזיקה, שמשפיעה על המאפיינים של פלט האודיו. הפרמטרים כוללים:-
guidance
: (float) טווח:[0.0, 6.0]
. ברירת מחדל:4.0
. ההגדרה הזו קובעת עד כמה המודל יפעל לפי ההנחיות. הגדרת הנחיה גבוהה יותר משפרת את ההתאמה להנחיה, אבל המעברים חדים יותר. -
bpm
: (int) טווח:[60, 200]
. מגדירים את מספר הפעימות לדקה שרוצים במוזיקה שנוצרה. צריך להפעיל או להשהות את המודל או לאפס את ההקשר שלו כדי שהוא יתחשב ב-BPM החדש. -
density
: (float) טווח:[0.0, 1.0]
. שליטה בצפיפות של התווים או הצלילים המוזיקליים. ערכים נמוכים יוצרים מוזיקה דלילה יותר, וערכים גבוהים יוצרים מוזיקה עשירה יותר. -
brightness
: (float) טווח:[0.0, 1.0]
. שינוי איכות הטון. ערכים גבוהים יותר יוצרים אודיו עם צליל 'בהיר' יותר, בדרך כלל עם דגש על תדרים גבוהים יותר. -
scale
: (Enum) הגדרת הסולם המוזיקלי (מפתח וסוג) ליצירה. משתמשים בערכי ה-enumScale
שסופקו על ידי ה-SDK. צריך להפסיק/להפעיל או לאפס את ההקשר של המודל כדי שהמודל יתחשב בסולם החדש. -
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
, אם לא מציינים ערך, המודל יחליט מה הכי טוב לפי ההנחיות הראשוניות.
אפשר גם להתאים אישית פרמטרים קלאסיים יותר כמו temperature
(0.0 עד 3.0, ברירת מחדל 1.1), top_k
(1 עד 1,000, ברירת מחדל 40) ו-seed
(0 עד 2,147,483,647, נבחר באופן אקראי כברירת מחדל) ב-MusicGenerationConfig
.
שינוי קנה המידה של ערכי enum
אלה כל הערכים של קנה המידה שהמודל יכול לקבל:
הערך של הטיפוס בן המנייה (enum) | קנה מידה / מפתח |
---|---|
C_MAJOR_A_MINOR |
דו מז'ור / לה מינור |
D_FLAT_MAJOR_B_FLAT_MINOR |
רה במול מז'ור / סי במול מינור |
D_MAJOR_B_MINOR |
D major / B minor |
E_FLAT_MAJOR_C_MINOR |
מי במול מז'ור / דו מינור |
E_MAJOR_D_FLAT_MINOR |
מי מז'ור / דו# מינור/רה במול מינור |
F_MAJOR_D_MINOR |
פה מז'ור / רה מינור |
G_FLAT_MAJOR_E_FLAT_MINOR |
סול במול מז'ור / מי במול מינור |
G_MAJOR_E_MINOR |
סול מז'ור / מי מינור |
A_FLAT_MAJOR_F_MINOR |
לה במול מז'ור / פה מינור |
A_MAJOR_G_FLAT_MINOR |
לה מז'ור / פה דיאז/סול במול מינור |
B_FLAT_MAJOR_G_MINOR |
רה במול מז'ור / סול מינור |
B_MAJOR_A_FLAT_MINOR |
סי מז'ור / סול דיאז/לה במול מינור |
SCALE_UNSPECIFIED |
ברירת מחדל / המודל מחליט |
המודל מסוגל להנחות את התווים שמושמעים, אבל הוא לא מבחין בין סולמות יחסיים. לכן כל enum תואם גם לטון המז'ורי והמינורי היחסיים. לדוגמה, C_MAJOR_A_MINOR
יתאים לכל הקלידים הלבנים של פסנתר, ו-F_MAJOR_D_MINOR
יהיה כל הקלידים הלבנים חוץ מסי במול.
מגבלות
- מוזיקה אינסטרומנטלית בלבד: המודל יוצר מוזיקה אינסטרומנטלית בלבד.
- בטיחות: ההנחיות נבדקות על ידי מסנני בטיחות. המערכת תתעלם מהנחיות שמפעילות את המסננים, ובמקרה כזה הסבר ייכתב בשדה
filtered_prompt
של הפלט. - הוספת סימני מים: פלט האודיו תמיד כולל סימני מים לצורך זיהוי, בהתאם לעקרונות השימוש האחראי ב-AI.
המאמרים הבאים
- במקום מוזיקה, אפשר ללמוד איך ליצור שיחה עם כמה דוברים באמצעות מודלים של TTS,
- כאן אפשר לקרוא איך ליצור תמונות או סרטונים.
- במקום ליצור מוזיקה או אודיו, כדאי ללמוד איך Gemini יכול להבין קובצי אודיו,
- מנהלים שיחה בזמן אמת עם Gemini באמצעות Live API.
בספר המתכונים אפשר למצוא עוד דוגמאות לקוד ומדריכים.