Lyria RealTime ব্যবহার করে Gemini API, একটি অত্যাধুনিক, রিয়েল-টাইম, স্ট্রিমিং সঙ্গীত জেনারেশন মডেলে অ্যাক্সেস প্রদান করে। এটি ডেভেলপারদের এমন অ্যাপ্লিকেশন তৈরি করতে দেয় যেখানে ব্যবহারকারীরা ইন্টারেক্টিভভাবে যন্ত্রসঙ্গীত তৈরি করতে, ক্রমাগত পরিচালনা করতে এবং পরিবেশন করতে পারে।
লিরিয়া রিয়েলটাইম ব্যবহার করে কী তৈরি করা যায় তা অভিজ্ঞতা অর্জন করতে, প্রম্পট ডিজে বা মিডি ডিজে অ্যাপ ব্যবহার করে এআই স্টুডিওতে চেষ্টা করুন!
সঙ্গীত প্রজন্ম কীভাবে কাজ করে
লিরিয়া রিয়েলটাইম মিউজিক জেনারেশন ওয়েবসকেট ব্যবহার করে একটি স্থায়ী, দ্বিমুখী, কম-বিলম্বিত স্ট্রিমিং সংযোগ ব্যবহার করে।
সঙ্গীত তৈরি এবং নিয়ন্ত্রণ করুন
লিরিয়া রিয়েলটাইম কিছুটা লাইভ এপিআই-এর মতো কাজ করে, কারণ এটি মডেলের সাথে রিয়েল-টাইম যোগাযোগ বজায় রাখার জন্য ওয়েবসকেট ব্যবহার করে। এটি এখনও ঠিক একই রকম নয় কারণ আপনি মডেলের সাথে কথা বলতে পারবেন না এবং এটি প্রম্পট করার জন্য আপনাকে একটি নির্দিষ্ট ফর্ম্যাট ব্যবহার করতে হবে।
নিম্নলিখিত কোডটি সঙ্গীত তৈরির পদ্ধতি প্রদর্শন করে:
পাইথন
এই উদাহরণটি client.aio.live.music.connect() ব্যবহার করে Lyria RealTime সেশনটি শুরু করে, তারপর 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())
জাভাস্ক্রিপ্ট
এই উদাহরণটি client.live.music.connect() ব্যবহার করে Lyria RealTime সেশনটি শুরু করে, তারপর 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() ব্যবহার করে সেশন শুরু, বিরতি, বন্ধ বা রিসেট করতে পারেন।
রিয়েল-টাইমে সঙ্গীত পরিচালনা করুন
প্রম্পট লিরিয়া রিয়েলটাইম
স্ট্রিমটি সক্রিয় থাকাকালীন, আপনি জেনারেট করা সঙ্গীত পরিবর্তন করার জন্য যেকোনো সময় নতুন WeightedPrompt বার্তা পাঠাতে পারেন। নতুন ইনপুটের উপর ভিত্তি করে মডেলটি মসৃণভাবে রূপান্তরিত হবে।
প্রম্পটগুলিকে সঠিক বিন্যাস অনুসরণ করতে হবে, যার মধ্যে একটি text (প্রকৃত প্রম্পট) এবং একটি weight । weight 0 ছাড়া যেকোনো মান নিতে পারে। 1.0 সাধারণত একটি ভালো শুরু বিন্দু।
পাইথন
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),
]
)
জাভাস্ক্রিপ্ট
await session.setMusicGenerationConfig({
weightedPrompts: [
{ text: 'Harmonica', weight: 0.3 },
{ text: 'Afrobeat', weight: 0.7 }
],
});
মনে রাখবেন যে প্রম্পটগুলি আমূল পরিবর্তন করার সময় মডেলের রূপান্তরগুলি কিছুটা আকস্মিক হতে পারে, তাই মডেলটিতে মধ্যবর্তী ওজনের মান পাঠিয়ে এক ধরণের ক্রস-ফেইডিং বাস্তবায়ন করার পরামর্শ দেওয়া হচ্ছে।
কনফিগারেশন আপডেট করুন
আপনি রিয়েল টাইমে মিউজিক জেনারেশন প্যারামিটারগুলিও আপডেট করতে পারেন। আপনি কেবল একটি প্যারামিটার আপডেট করতে পারবেন না, আপনাকে পুরো কনফিগারেশনটি সেট করতে হবে অন্যথায় অন্যান্য ক্ষেত্রগুলি তাদের ডিফল্ট মানগুলিতে পুনরায় সেট করা হবে।
যেহেতু bpm বা স্কেল আপডেট করা মডেলের জন্য একটি বিরাট পরিবর্তন, তাই নতুন কনফিগারেশনটি বিবেচনায় নেওয়ার জন্য reset_context() ব্যবহার করে এর প্রসঙ্গ রিসেট করতে বলা হবে। এটি স্ট্রিম বন্ধ করবে না, তবে এটি একটি কঠিন রূপান্তর হবে। অন্যান্য প্যারামিটারের জন্য আপনাকে এটি করার দরকার নেই।
পাইথন
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();
জাভাস্ক্রিপ্ট
await session.setMusicGenerationConfig({
musicGenerationConfig: {
bpm: 120,
density: 0.75,
musicGenerationMode: MusicGenerationMode.QUALITY
},
});
await session.reset_context();
লিরিয়া রিয়েলটাইমের জন্য প্রম্পট গাইড
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, ...
এগুলো কেবল কিছু উদাহরণ, লিরিয়া রিয়েলটাইম আরও অনেক কিছু করতে পারে। আপনার নিজস্ব প্রম্পট নিয়ে পরীক্ষা করুন!
সেরা অনুশীলন
- মসৃণ প্লেব্যাক নিশ্চিত করার জন্য ক্লায়েন্ট অ্যাপ্লিকেশনগুলিকে অবশ্যই শক্তিশালী অডিও বাফারিং প্রয়োগ করতে হবে। এটি নেটওয়ার্কের ভীতি এবং জেনারেশন ল্যাটেন্সিতে সামান্য তারতম্যের হিসাব করতে সাহায্য করে।
- কার্যকর প্ররোচনা:
- বর্ণনামূলক হোন। মেজাজ, ধরণ এবং বাদ্যযন্ত্র বর্ণনা করে বিশেষণ ব্যবহার করুন।
- পুনরাবৃত্তি করুন এবং ধীরে ধীরে পরিচালনা করুন। প্রম্পট সম্পূর্ণরূপে পরিবর্তন করার পরিবর্তে, সঙ্গীতকে আরও মসৃণভাবে রূপান্তর করার জন্য উপাদানগুলি যোগ বা পরিবর্তন করার চেষ্টা করুন।
- একটি নতুন প্রম্পট চলমান প্রজন্মকে কতটা জোরালোভাবে প্রভাবিত করে তা প্রভাবিত করতে
WeightedPromptএ ওজন নিয়ে পরীক্ষা করুন।
প্রযুক্তিগত বিবরণ
এই বিভাগে লিরিয়া রিয়েলটাইম মিউজিক জেনারেশন কীভাবে ব্যবহার করবেন তার সুনির্দিষ্ট বিবরণ বর্ণনা করা হয়েছে।
স্পেসিফিকেশন
- আউটপুট ফর্ম্যাট: কাঁচা ১৬-বিট পিসিএম অডিও
- নমুনা হার: 48kHz
- চ্যানেল: ২টি (স্টিরিও)
নিয়ন্ত্রণ
নিম্নলিখিত বার্তাগুলি প্রেরণের মাধ্যমে রিয়েল টাইমে সঙ্গীত প্রজন্মকে প্রভাবিত করা যেতে পারে:
-
WeightedPrompt: একটি টেক্সট স্ট্রিং যা একটি সঙ্গীতের ধারণা, ধরণ, বাদ্যযন্ত্র, মেজাজ বা বৈশিষ্ট্য বর্ণনা করে। প্রভাব মিশ্রিত করার জন্য একাধিক প্রম্পট সরবরাহ করা যেতে পারে। লিরিয়া রিয়েলটাইমকে কীভাবে সর্বোত্তমভাবে প্রম্পট করবেন সে সম্পর্কে আরও বিশদের জন্য উপরে দেখুন। -
MusicGenerationConfig: সঙ্গীত তৈরির প্রক্রিয়ার জন্য কনফিগারেশন, যা আউটপুট অডিওর বৈশিষ্ট্যগুলিকে প্রভাবিত করে।)। প্যারামিটারগুলির মধ্যে রয়েছে:-
guidance: (float) পরিসর:[0.0, 6.0]। ডিফল্ট:4.0। মডেলটি প্রম্পটগুলি কতটা কঠোরভাবে অনুসরণ করে তা নিয়ন্ত্রণ করে। উচ্চতর নির্দেশিকা প্রম্পটের আনুগত্য উন্নত করে, তবে পরিবর্তনগুলিকে আরও আকস্মিক করে তোলে। -
bpm: (int) রেঞ্জ:[60, 200]। জেনারেটেড মিউজিকের জন্য আপনার কাঙ্ক্ষিত বিটস প্রতি মিনিট সেট করে। নতুন bpm বিবেচনা করে আপনাকে মডেলের প্রেক্ষাপট থামাতে/চালাতে বা রিসেট করতে হবে। -
density: (ভাসমান) পরিসর:[0.0, 1.0]। সঙ্গীতের স্বর/ধ্বনির ঘনত্ব নিয়ন্ত্রণ করে। নিম্ন মানগুলি বিক্ষিপ্ত সঙ্গীত উৎপন্ন করে; উচ্চ মানগুলি "ব্যস্ত" সঙ্গীত উৎপন্ন করে। -
brightness: (ভাসমান) পরিসর:[0.0, 1.0]। টোনাল মানের সমন্বয় করে। উচ্চতর মান "উজ্জ্বল" শব্দযুক্ত অডিও তৈরি করে, সাধারণত উচ্চতর ফ্রিকোয়েন্সিগুলিকে জোর দেয়। -
scale: (Enum) প্রজন্মের জন্য মিউজিক্যাল স্কেল (কী এবং মোড) সেট করে। SDK দ্বারা প্রদত্তScaleenum মানগুলি ব্যবহার করুন। আপনাকে নতুন স্কেল বিবেচনা করে মডেলের প্রসঙ্গ থামাতে/চালাতে বা রিসেট করতে হবে। -
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 থেকে 1000, ডিফল্ট 40), এবং seed (0 থেকে 2 147 483 647, এলোমেলোভাবে ডিফল্টভাবে নির্বাচিত) এর মতো আরও ক্লাসিক্যাল প্যারামিটারগুলিও MusicGenerationConfig এ কাস্টমাইজযোগ্য।
স্কেল এনাম মান
মডেলটি যে সমস্ত স্কেল মান গ্রহণ করতে পারে তা এখানে দেওয়া হল:
| এনাম মান | স্কেল / কী |
|---|---|
C_MAJOR_A_MINOR | সি মেজর / এ মাইনর |
D_FLAT_MAJOR_B_FLAT_MINOR | ডি♭ মেজর / বি♭ মাইনর |
D_MAJOR_B_MINOR | ডি মেজর / বি মাইনর |
E_FLAT_MAJOR_C_MINOR | E♭ মেজর / C মাইনর |
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♭ মেজর / F মাইনর |
A_MAJOR_G_FLAT_MINOR | একটি মেজর / F♯/G♭ মাইনর |
B_FLAT_MAJOR_G_MINOR | বি♭ মেজর / জি মাইনর |
B_MAJOR_A_FLAT_MINOR | বি মেজর / জি♯/এ♭ মাইনর |
SCALE_UNSPECIFIED | ডিফল্ট / মডেল সিদ্ধান্ত নেয় |
এই মডেলটি বাজানো নোটগুলিকে নির্দেশ করতে সক্ষম, কিন্তু আপেক্ষিক কীগুলির মধ্যে পার্থক্য করে না। সুতরাং প্রতিটি এনাম আপেক্ষিক মেজর এবং মাইনর উভয়ের সাথেই মিলবে। উদাহরণস্বরূপ, C_MAJOR_A_MINOR একটি পিয়ানোর সমস্ত সাদা কীগুলির সাথে মিলবে, এবং F_MAJOR_D_MINOR হল B ফ্ল্যাট ছাড়া সমস্ত সাদা কী।
সীমাবদ্ধতা
- শুধুমাত্র যন্ত্রসঙ্গীত: মডেলটি শুধুমাত্র যন্ত্রসঙ্গীত তৈরি করে।
- নিরাপত্তা: নিরাপত্তা ফিল্টার দ্বারা প্রম্পটগুলি পরীক্ষা করা হয়। ফিল্টারগুলি ট্রিগারকারী প্রম্পটগুলি উপেক্ষা করা হবে, এই ক্ষেত্রে আউটপুটের
filtered_promptক্ষেত্রে একটি ব্যাখ্যা লেখা হবে। - ওয়াটারমার্কিং: আমাদের দায়িত্বশীল এআই নীতি অনুসরণ করে সনাক্তকরণের জন্য আউটপুট অডিও সর্বদা ওয়াটারমার্ক করা হয়।
এরপর কি?
- সঙ্গীতের পরিবর্তে, TTS মডেল ব্যবহার করে মাল্টি-স্পিকার কথোপকথন তৈরি করতে শিখুন,
- ছবি বা ভিডিও তৈরি করার পদ্ধতি আবিষ্কার করুন,
- জেনারেশন মিউজিক বা অডিওর পরিবর্তে, জেনে নিন কিভাবে জেমিনি অডিও ফাইল বুঝতে পারে,
- লাইভ API ব্যবহার করে জেমিনির সাথে রিয়েল-টাইম কথোপকথন করুন।
আরও কোড উদাহরণ এবং টিউটোরিয়ালের জন্য কুকবুকটি ঘুরে দেখুন।