prosody dependent compositions
Millisecond ধরে ধরে prosody স্ট্রাকচার ধরে ধরে আরোহ অব রোহ ধরে ধরে বুঝতে চাইছি স্বর এর লিপি মিলিয়ে মিলিয়ে দেখছি।aesthetics এর transformation গুলো বুঝতে চেষ্টা করছি। পাকর গুলোকে পাক___ড়াও করতে চেষ্টা করছি।raga ডিটেক্টর regular expression গুলোকে বুঝতে চাইছি।এখানে যে উপায়ে রাগ বিশ্লেষণ করা হচ্ছে এখানে মিলিসেকেন্ড ধরে ধরে প্রোসোডি স্ট্রাকচার, আরোহ অবরোহ, স্বরের লিপি, অ্যাস্থেটিক ট্রান্সফর্মেশন, পাকর, এবং রেগুলার এক্সপ্রেশন দ্বারা রাগ ডিটেকশন এটি এক ধরনের computational musicology বা algorithmic raga analysis এর দিকে যাচ্ছে।একে একে ভেঙে দেখি এবং সম্ভাব্য বিশ্লেষণ কাঠামো দাঁড় করাই যা গোটা একটা থিওরি এবং সফটওয়ার দুটোই হয়ে উঠবে ধীরে ধীরে।
সঞ্জয় নাথ এখানে মূলত algorithmic raga-poetics বা computational rasa synthesis এর ভিত্তি স্থাপন করার পথ খুঁজছেন। এটি AI নয়, বরং deeply mathematical এবং artistic approach।এই পুরো Framework-টি C# বা Python এ ধাপে ধাপে তৈরি করে CLI tool দিয়ে শুরু করে, শেষে MIDI+Poem+Raga mapper বানানো যেতে পারে।
https://en.wikipedia.org/wiki/List_of_film_songs_based_on_ragas?wprov=sfla1
১. Prosody Structure in Milliseconds
Prosody বলতে বোঝানো হয় timing, rhythm, emphasis ইত্যাদি। আমি কেবল MIDI data পদ্ধতি ব্যবহার করছি
Note On/Off times → millisecond gap ধরে প্রোসোডি গ্রিড তৈরি করা যায়
Velocity variation → স্বরের জোর-নরম ভাব
Duration clusters → স্বর কত সময় ধরে ধরে গাওয়া হয়েছে তা থেকে মেল-বোল বা আলঙ্কার বোঝা যায়
Example Pattern
[Sa, 300ms] → [Re, 150ms] → [Ga, 150ms] → [Ma, 500ms]
২. Aroha & Avaroha Sequence Matching
রাগের আরোহ অবরোহ হচ্ছে মূল skeleton
যেমন, রাগ যামনের আরোহ Ni Re Ga Ma# Dha Ni Sa
MIDI note sequence (ধরে নিই C=Sa),
C# D E F# G# A B C (যদি এটা হয়)
তাহলে রেগুলার এক্সপ্রেশন ব্যবহার করতে পারি
(Ni)? Re Ga Ma(#)? Dha Ni Sa
এভাবে রাগের স্বর বিন্যাসকে pattern matching এর মাধ্যমে ধরা যায়।
৩. Swar Lipi Matching
MIDI note number (যেমন C4 = 60) থেকে Swar Lipi বের করতে পেরেছি এখন একটি mapping দিয়ে
৪. Aesthetics Transformation Understanding
রাগের অ্যাস্থেটিক ট্রান্সফর্মেশন বোঝা যায়
Gamak detections Rapid oscillation
Meend: detections Pitch bend / slide between notes
Songs Andolan detection Slow oscillation
Kan Swar Grace notes detection
যদি pitch bend ডেটা বিশ্লেষণ করতে হয়, তাহলে এই ornamentation গুলো detect করা সম্ভব।
৫. পোকর Detection → পকোড়া Framework
পকর হচ্ছে signature phrase (motif) যেমন রাগ যামনের পাকর: Ni Re Ga Ma
ড়াও বলতে বোঝাতে চাইছি "এই পাকর এর pattern ফ্রেজগুলোকে ধরে ফেলা ও তাদের উপর বিভিন্ন ট্রান্সফর্মেশন প্রয়োগ করে দেখা" একটি অলরেডি অনেকেই করেছে এবং দারুন একটা computational approach।
Framework টা এমনি হতেই হতে পারে
PAKAR_PATTERN = r"(Ni)? Re Ga Ma"
if re.search(PAKAR_PATTERN, midi_swar_sequence):
print("Yaman Detected")
৬. Raga Detector Regular Expressions
রাগ ডিটেকশন রেগেক্স সিস্টেম তৈরি হতে পারে
RAGA_PATTERNS = {
"Yaman": r"(Ni)? Re Ga Ma(#)? Dha Ni Sa",
"Bhairavi": r"Sa Re(b) Ga(b) Ma Pa Dha(b) Ni(b) Sa",
"Desh": r"Ni Sa Re Ma Pa Ni Sa"
# etc.
}
এগুলো দিয়ে sequence matching করে রাগ অনুমান করতে চেষ্টা করা যেতেই পারে কিন্তু prosody structure আরো গভীর।
একটি সম্পূর্ণ computational raga theory & synthesis framework গঠন করার চেষ্টা হচ্ছে, যেখানে milliseconds ধরে ধরে, pitch, velocity, এবং রাগ সংক্রান্ত প্যাটার্ন ব্যবহার করে করে নতুন প্যাটার্ন খোজার চেষ্টা হচ্ছে
Prosody structure বিশ্লেষণ
Raga specific motif matching (pakar detection)
Aesthetic transformations (gamak, meend, andolan, kan swar)
Regular expression based raga detection and novel pattern composition systems
Dynamic pattern rendering through MIDI generation
আমরা ধাপে ধাপে একটি Raga Pattern Permutation Synthesizer তৈরি করতে পারি।
Phase 1
Input (Fixed Swar Lipi of a Raga)
ধরি, রাগ যামনের একটা আরোহ সিকোয়েন্স টাইপ করা আছে পাতি নোট প্যাড এ
[Ni, Re, Ga, Ma, Dha, Ni, Sa]
আমরা ধরছি এটা হলো
var ragaYaman = new List<string> { "Ni", "Re", "Ga", "Ma", "Dha", "Ni", "Sa" };
Phase 2
Duration Permutation Generator
একই স্বর রক্ষিত রেখে, কেবল মিলিসেকেন্ড ডিউরেশন গুলো permutation করে
var durations = new List<int[]> {
new[] { 300, 150, 150, 500, 200, 200, 400 },
new[] { 200, 200, 200, 200, 200, 200, 200 },
new[] { 100, 300, 100, 300, 100, 300, 100 },
// আরও অনেকে
};
Phase 3
MIDI Generator (NAudio ব্যবহার করে)
প্রতিটি duration variation দিয়ে নতুন MIDI তৈরি করা
// MIDI note mapping e.g., Sa = 60
Dictionary<string, int> swarToMidi = new() {
["Sa"] = 60, ["Re"] = 62, ["Ga"] = 64, ["Ma"] = 65, ["Dha"] = 67, ["Ni"] = 71
};
// Generate MIDI with each duration pattern
void GenerateMidiWithDurations(List<string> swars, int[] durations, string outputPath) {
var midi = new MidiEventCollection(1, 480);
int time = 0;
for (int i = 0; i < swars.Count; i++) {
int midiNote = swarToMidi[swars[i]];
midi[0].Add(new NoteOnEvent(time, 1, midiNote, 90, durations[i]));
midi[0].Add(new NoteOffEvent(time + durations[i], 1, midiNote, 0));
time += durations[i];
}
MidiFile.Export(outputPath, midi);
}
Phase 4
Pattern Matching ও রাগ ডিটেকশন (RegEx Approach)
var ragaPatterns = new Dictionary<string, string> {
["Yaman"] = @"(Ni\s)?Re\sGa\sMa\sDha\sNi\sSa"
// অন্যান্য রাগ
};
bool MatchRaga(string sequence, string pattern) {
return Regex.IsMatch(sequence, pattern);
}
Phase 5 Pakar Detection & Transformation
Pakar fragment detect করে তার উপর timing/gap/velocity variation প্রয়োগ করে রূপান্তরিত ভার্সন তৈরি:
Original: Ni Re Ga Ma
Variation 1 Ni(300ms) Re(150) Ga(150) Ma(400)
Variation 2 Ni(100) Re(300) Ga(100) Ma(300)
Phase 6
UI/CLI Structure (পর্যায়ক্রমে বাস্তবায়নযোগ্য)
CLI tool
Provide SwarLipi and Duration Matrix → output multiple MIDI files
Future scope
Input MIDI → Detect Raga via RE → Identify Pakar(s) → Generate transformed compositions
আধুনিক বলিউড গানে ভারতীয় শাস্ত্রীয় রাগের প্রভাব এখনও বিদ্যমান। নিচে কিছু উল্লেখযোগ্য রাগ এবং তাদের উপর ভিত্তি করে তৈরি কিছু আধুনিক বলিউড গানের উদাহরণ
১. রাগ ভৈরবী (Bhairavi):
"জিয়া জলে" – দিল সে (১৯৯৮)
"সাপনো সে ভরে নায়না" – লাক বাই চান্স (২০০৯)
২. রাগ যামন (Yaman):
"লাাল ইশক" – রাম-লীলা (২০১৩)
"আজ ইবাদত" – বাজিরাও মাস্তানি (২০১৫)
৩. রাগ দরবারি কানাড়া (Darbari Kanada):
"পুকাল পুকুম থারুনাম" – মাদ্রাসাপত্তিনাম (২০১০)
"ভিরা রাজা ভিরা" – পোন্নিয়িন সেলভান II (২০২৩)
৪. রাগ দেশ (Desh):
"আগর তুম সাথ হো" – তামাশা (২০১৫)
"ছোটি সি চিরাইয়া" – মিমি (২০২১)
৫. রাগ চারুকেশী (Charukesi):
"আহিস্তা আহিস্তা" – স্বদেশ (২০০৪)
"তু হি রে" – বম্বে (১৯৯৫)
৬. রাগ হংসধ্বনি (Hamsadhwani):
"তেরি মিট্টি" – কেসারি (২০১৯)
"ইয়ে জো দেশ হ্যায় মেরা" – স্বদেশ (২০০৪)
৭. রাগ সিন্ধু ভৈরবী (Sindhu Bhairavi):
"কুন ফায়া কুন" – রকস্টার (২০১১)
"রং দে বাসন্তি" – রং দে বাসন্তি (২০০৬)
৮. রাগ মালকৌন্স (Malkauns)
"ইনিসাই আলাপেদায়ে" – ভারালারু (২০০৬)
"মার্গাজি পুভে" – মে মাধাম (১৯৯৪)
এই গানগুলোতে রাগের প্রয়োগ কখনও সরাসরি, কখনও বা অনুপ্রাণিত হয়ে করা হয়েছে।
List of film songs based on ragas
এটা নিছক একটি MIDI প্রজেক্ট নয়, বরং একটি comprehensive computational musicology framework তৈরির দিকেই এগোচ্ছে, যেখানে রাগ, প্রোসোডি, অ্যাস্থেটিক ট্রান্সফর্মেশন, এবং নিয়মমাফিক pattern matching এর একীভূত বিশ্লেষণ হবে।
এইবার মূল প্রশ্নগুলোকে আমি ভাঙছি এবং এর সঙ্গে computational approach কে সংযুক্ত করছি
মূল প্রশ্নগুলোর বিশ্লেষণ
১. যে কবিতা লেখে, সে কি কোনো সুর ভেবে লেখে?
অনেক কবি অন্তঃস্বরূপ ছন্দ এবং রিদম মাথায় রেখেই লেখেন, যা একধরনের internalized melody। এটি হয়ত নির্দিষ্ট রাগ না হলেও, prosodic pattern (stress, pause, duration) মনে রেখে লেখা হয়।ভারতীয় কবিতার অনেক অংশ (বিশেষ করে পদাবলী বা রবীন্দ্রসঙ্গীত) রাগাশ্রিত হয়ে থাকে।
Computationally
কবিতার syllable durations, stress points এবং pause-গুলিকে milliseconds এ বিশ্লেষণ করলে, সেটা MIDI prosody grid এর মতো ব্যবহার করে রাগে পরিণত করা যায়।
২. যে সুর ভাবে সে কি কোন কবিতা ধরে নেয়?
গায়ক বা সুরকার যখন একটা রাগ ধরে ভাবেন, তখন তারা স্বাভাবিকভাবেই কিছু শব্দ বা ভাবনা কল্পনা করেন, যেগুলো সেই রাগের mood বহন করে।
উদাহরণ
রাগ ভৈরবী → বেদনা, রাগ দেশ → বর্ষা ও দেশাত্মবোধ
Computationally
যদি একটি নির্দিষ্ট রাগের pitch-dynamics-prosody pattern থাকে, তাহলে তার সঙ্গে মিলে এমন শব্দের cluster বা lexicon তৈরি করা সম্ভব।
৩. যে দুটোই করে সে কোনটা আগে করে এবং কেনো?
কবি-সুরকারেরা ভিন্ন পথে যান। কারো inspiration আসে শব্দ থেকে, কারো সুর থেকে। তবে অভিজ্ঞতার পরিপ্রেক্ষিতে অনেকেই মিল বা মিলন খোঁজেন।
Computationally: এই দ্বৈত গতি বুঝতে হলে একটি bi-directional pattern transformation system দরকার, যা
কবিতার prosody → probable melodic structure তৈরি করে
রাগ/মেলোডি → সম্ভাব্য কবিতার ছন্দ ও লিপি নির্দেশ করে
আরও গভীর প্রশ্ন
পৃথিবীর সমস্ত ভাষার কবিতায় কি আলাদা দেশের সুর প্রয়োগযোগ্য?
না এবং হ্যাঁ দুইটাই সত্য।
না কারণ প্রতিটি ভাষার phonotactic constraint, tonal contour, এবং stress timing vs syllable timing ভিন্ন।
হ্যাঁ কারণ রাগ বা মেলোডির অনেক গভীর রস বৈশ্বিক (সিম্প্যাথেটিক vibration, slow oscillation etc.) যেমন minor scale বিষণ্ণতা সব ভাষাতেই একইভাবে অনুভূত হয়।
Computationally
একটি universal expressive pattern তৈরি করা যেতে পারে যার মধ্যে রাগ, ভাষা, এবং prosody aligned থাকে।
উদাহরণ
রাগ দেশ এর pitch contour + বাংলা ভাষার syllable structure → বাংলা কবিতা বা গান
সঞ্জয় নাথ এর এই প্রস্তাবিত Framework কে সংহতভাবে সাজালে দাঁড়ায়
Phasewise Computational Raga Aesthetic Framework (CRAFT):
Phase 1
Swar & Prosody Grid Formation
SwarLipi to MIDI Mapping
Prosody Grid → [Note, Duration, Velocity]
Phase 2
Raga Pattern Regex Matcher
Raga → Regex → Sequence Matching
Allow fuzzy pattern (with optional notes)
Phase 3
Aesthetic Detector and generator
Gamak → Pitch Oscillation > threshold
Meend → Continuous Pitch Bend Slope
Kan → Grace note with short duration
Andolan → Slow pitch oscillation
Phase 4
Pakar Extractor & Transformer
Identify motif → Apply time/pitch/velocity permutations
Create transformed pakars
Phase 5
Raga-Specific Pattern Synthesizer
Dynamically compose variations keeping raga intact
Output to MIDI
Phase 6
Poetry Melody Bidirectional Mapper
Input poem → analyze stress pattern → suggest raga
Input raga → suggest rhythmic syllabic poetic structures
সঞ্জয় নাথ এখানে মূলত algorithmic raga-poetics বা computational rasa synthesis এর ভিত্তি স্থাপন করার পথ খুঁজছেন। এটি AI নয়, বরং deeply mathematical এবং artistic approach।এই পুরো Framework-টি C# বা Python এ ধাপে ধাপে তৈরি করে CLI tool দিয়ে শুরু করে, শেষে MIDI+Poem+Raga mapper বানানো যেতে পারে।
Comments
Post a Comment