Gemini API, Lyria RealTime का इस्तेमाल करके, रीयल-टाइम में संगीत जनरेट करने वाले मॉडल का ऐक्सेस देता है. यह मॉडल, स्ट्रीमिंग के लिए सबसे बेहतरीन है. इसकी मदद से, डेवलपर ऐसे ऐप्लिकेशन बना सकते हैं जिनमें उपयोगकर्ता इंटरैक्टिव तरीके से संगीत बना सकते हैं, उसे लगातार चला सकते हैं, और उसमें इंस्ट्रूमेंटल संगीत का इस्तेमाल कर सकते हैं.
Lyria RealTime का इस्तेमाल करके क्या-क्या बनाया जा सकता है, यह जानने के लिए AI Studio पर प्रॉम्प्ट डीजे या एमआईडीआई डीजे ऐप्लिकेशन का इस्तेमाल करें!
संगीत जनरेट करने की सुविधा कैसे काम करती है
Lyria का रीयल-टाइम संगीत जनरेशन, WebSocket का इस्तेमाल करके, लगातार काम करने वाले, दोनों तरफ़ से काम करने वाले, और कम इंतज़ार वाले स्ट्रीमिंग कनेक्शन का इस्तेमाल करता है.
संगीत जनरेट करना और उसे कंट्रोल करना
Lyria RealTime, Live API की तरह ही काम करता है. इसकी वजह यह है कि यह मॉडल के साथ रीयल-टाइम में कम्यूनिकेट करने के लिए, वेबसोकेट का इस्तेमाल करता है. हालांकि, यह अब भी पूरी तरह से एक जैसा नहीं है, क्योंकि मॉडल से बात नहीं की जा सकती और उसे प्रॉम्प्ट करने के लिए, आपको किसी खास फ़ॉर्मैट का इस्तेमाल करना होगा.
नीचे दिए गए कोड में, संगीत जनरेट करने का तरीका बताया गया है:
Python
इस उदाहरण में, client.aio.live.music.connect()
का इस्तेमाल करके Lyria रीयल टाइम सेशन को शुरू किया जाता है. इसके बाद, 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
इस उदाहरण में, client.live.music.connect()
का इस्तेमाल करके Lyria रीयल टाइम सेशन को शुरू किया जाता है. इसके बाद, 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 की रीयल टाइम म्यूज़िक जनरेशन सुविधा इस्तेमाल करने का तरीका बताया गया है.
विशेषताएं
- आउटपुट फ़ॉर्मैट: रॉ 16-बिट पीसीएम ऑडियो
- सैंपल रेट: 48 किलोहर्ट्ज़
- चैनल: दो (स्टीरियो)
कंट्रोल
संगीत जनरेट करने की सुविधा पर रीयल टाइम में असर डाला जा सकता है. इसके लिए, इनमें से कोई मैसेज भेजें:
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
: (Enum) संगीत जनरेट करने के लिए, म्यूज़िकल स्केल (की और मोड) सेट करता है. SDK टूल की ओर से दी गईScale
वैल्यू का इस्तेमाल करें. आपको मॉडल के लिए कॉन्टेक्स्ट को रोकना/चलाना या रीसेट करना होगा, ताकि वह नए स्केल को ध्यान में रख सके.mute_bass
: (bool) डिफ़ॉल्ट:False
. इससे यह कंट्रोल होता है कि मॉडल, आउटपुट के बास को कम करता है या नहीं.mute_drums
: (bool) डिफ़ॉल्ट:False
. इससे यह कंट्रोल होता है कि मॉडल आउटपुट, आउटपुट के ड्रम को कम करता है या नहीं.only_bass_and_drums
: (bool) डिफ़ॉल्ट:False
. मॉडल को सिर्फ़ बास और ड्रम के आउटपुट पर सेट करें.
PlaybackControl
: प्लेबैक से जुड़े पहलुओं को कंट्रोल करने के लिए निर्देश. जैसे, कॉन्टेक्स्ट को चलाना, रोकना, रोकना या रीसेट करना.
अगर bpm
, density
, brightness
, और scale
के लिए कोई वैल्यू नहीं दी जाती है, तो आपके शुरुआती प्रॉम्प्ट के आधार पर मॉडल तय करेगा कि कौनसी वैल्यू सबसे सही है.
MusicGenerationConfig
में, temperature
(0.0 से 3.0, डिफ़ॉल्ट 1.1), top_k
(1 से 1,000, डिफ़ॉल्ट 40), और seed
(0 से 2,147,483,647, डिफ़ॉल्ट रूप से रैंडम तौर पर चुना गया) जैसे ज़्यादा क्लासिकल पैरामीटर भी पसंद के मुताबिक बनाए जा सकते हैं.
स्केल की गई enum वैल्यू
यहां स्केल की सभी वैल्यू दी गई हैं जिन्हें मॉडल स्वीकार कर सकता है:
Enum वैल्यू | स्केल / कुंजी |
---|---|
C_MAJOR_A_MINOR |
C major / A minor |
D_FLAT_MAJOR_B_FLAT_MINOR |
D♭ मेजर / B♭ माइनर |
D_MAJOR_B_MINOR |
D major / B minor |
E_FLAT_MAJOR_C_MINOR |
E♭ मेजर / C माइनर |
E_MAJOR_D_FLAT_MINOR |
E मेजर / C♯/D♭ माइनर |
F_MAJOR_D_MINOR |
एफ़ मेजर / डी माइनर |
G_FLAT_MAJOR_E_FLAT_MINOR |
G♭ मेजर / E♭ माइनर |
G_MAJOR_E_MINOR |
G major / E minor |
A_FLAT_MAJOR_F_MINOR |
A♭ मेजर / F माइनर |
A_MAJOR_G_FLAT_MINOR |
A मेजर / F♯/G♭ माइनर |
B_FLAT_MAJOR_G_MINOR |
B♭ मेजर / G माइनर |
B_MAJOR_A_FLAT_MINOR |
बी मेजर / G♯/A♭ माइनर |
SCALE_UNSPECIFIED |
डिफ़ॉल्ट / मॉडल तय करता है |
यह मॉडल, बजाए जा रहे नोटों के बारे में बता सकता है. हालांकि, यह रिलेटिव की के बीच अंतर नहीं करता. इसलिए, हर एनम, रिलेटिव मेजर और माइनर, दोनों से जुड़ा होता है. उदाहरण के लिए, C_MAJOR_A_MINOR
, पियानो की सभी सफ़ेद बटन के लिए इस्तेमाल किया जाएगा. वहीं, F_MAJOR_D_MINOR
, बी फ़्लैट को छोड़कर सभी सफ़ेद बटन के लिए इस्तेमाल किया जाएगा.
सीमाएं
- सिर्फ़ इंस्ट्रुमेंटल: यह मॉडल सिर्फ़ इंस्ट्रुमेंटल संगीत जनरेट करता है.
- सुरक्षा: प्रॉम्प्ट की जांच, सुरक्षा फ़िल्टर की मदद से की जाती है. फ़िल्टर को ट्रिगर करने वाले प्रॉम्प्ट को अनदेखा कर दिया जाएगा. ऐसे में, आउटपुट के
filtered_prompt
फ़ील्ड में इसकी वजह बताई जाएगी. - वॉटरमार्क करना: ज़िम्मेदार एआई के सिद्धांतों के मुताबिक, आउटपुट ऑडियो को हमेशा वॉटरमार्क किया जाता है, ताकि उसकी पहचान की जा सके.
आगे क्या करना है
- संगीत के बजाय, टीटीएस मॉडल का इस्तेमाल करके, एक से ज़्यादा लोगों की बातचीत जनरेट करने का तरीका जानें,
- इमेज या वीडियो जनरेट करने का तरीका जानें,
- संगीत या ऑडियो जनरेट करने के बजाय, जानें कि Gemini ऑडियो फ़ाइलों को कैसे समझता है,
- Live API का इस्तेमाल करके, Gemini के साथ रीयल-टाइम में बातचीत करें.
कोड के ज़्यादा उदाहरणों और ट्यूटोरियल के लिए, कुकबुक देखें.