এই নিবন্ধে জেনেরিক MIDI আর্কিটেকচার বর্ণনা করা হয়েছে যা যেকোনও প্ল্যাটফর্ম ইমপ্লিমেন্টেশন, API বা প্ল্যাটফর্ম-নির্দিষ্ট ফিচার থেকে স্বতন্ত্র।
মূল ধারণা
ইভেন্ট
MIDI প্রোটোকল ইভেন্ট-ভিত্তিক যোগাযোগের জন্য ডিজাইন করা হয়েছে। ইভেন্ট হল এমন একটি ইঙ্গিত যা থেকে বোঝা যায় যে নির্দিষ্ট সময়ে কিছু ঘটেছে বা ঘটবে। MIDI ইভেন্ট মেসেজ, তথ্যের অ্যাটমিক বান্ডেল দ্বারা উপস্থাপিত হয়।
পরিবহন
MIDI মেসেজ এনকোড করা হয় এবং একটি ট্রান্সপোর্ট লেয়ার, সংক্ষেপে ট্রান্সপোর্ট-এর মাধ্যমে ডেলিভার করা হয়, যা প্রাপককে র MIDI ডেটা পাঠায়, তারপর প্রাপক ডেটাটিকে মেসেজে ডিকোড করেন।
হার্ডওয়্যার-ভিত্তিক MIDI ট্রান্সপোর্টের মধ্যে এগুলি অন্তর্ভুক্ত:
- ৫-পিন DIN কানেক্টর সহ MIDI 1.0 কারেন্ট লুপ
- USB
- ব্লুটুথ লো এনার্জি (BLE)
মেসেজ রিপ্রেজেন্টেশন
কীভাবে মেসেজ পাঠাতে হয় তা MIDI ট্রান্সপোর্ট স্পেসিফিকেশন থেকে জানা যায়। যদিও মেসেজের প্যাকেজিং সবচেয়ে নিম্ন লেভেলে ট্রান্সপোর্ট-নির্দিষ্ট হয়, তবে উচ্চতর লেভেলে অ্যাপ্লিকেশনগুলি সময়-অনুযায়ী সাজানো মেসেজের ক্রমকে একটি চিহ্নিত করা বাইট স্ট্রিম হিসেবে বিবেচনা করতে পারে। এটি সম্ভব কারণ প্রতিটি মেসেজে মেসেজের মোট দৈর্ঘ্য নির্ধারণ করার জন্য পর্যাপ্ত তথ্য থাকে, যদি মেসেজের সীমানার শুরু জানা থাকে।
বেশিরভাগ MIDI মেসেজ ছোট (এক থেকে তিন বাইট) হয়, তবে SysEx-এর মাধ্যমে আরও বড় মেসেজ পাঠানোর ক্ষমতাও এতে আছে।
টাইমস্ট্যাম্প
টাইমস্ট্যাম্প হল একটি ঐচ্ছিক লেবেল যা মেসেজ তৈরি বা পাওয়ার সময় মেসেজের সাথে যুক্ত করা হয়, এটি ট্রান্সপোর্টের উপর নির্ভর করে। টাইমস্ট্যাম্প সময়ের ইউনিটে প্রকাশ করা হয়, যেমন সেকেন্ড বা টিক।
স্পষ্ট টাইমস্ট্যাম্প না থাকলে, সিস্টেমকে অবশ্যই ঠিক আগের মেসেজের টাইমস্ট্যাম্প বা বর্তমান সময় বিকল্প হিসেবে ব্যবহার করতে হবে। এইসব টাইমস্ট্যাম্পের নির্ভুলতা, তা স্পষ্ট বা অন্তর্নিহিত যাই হোক না কেন, MIDI-ভিত্তিক সিস্টেমের নির্ভরযোগ্যতার একটি গুরুত্বপূর্ণ দিক।
টাইমস্ট্যাম্প MIDI 1.0 প্রোটোকলের অংশ নয়। এগুলি প্রায়শই প্ল্যাটফর্ম-নির্দিষ্ট API-এর অংশ হিসেবে যোগ করা হয়। BLE ট্রান্সপোর্টে টাইমস্ট্যাম্প থাকে যা একটি BLE প্যাকেটের মধ্যে একাধিক স্বতন্ত্র মেসেজ পাঠানোর সময় নির্দেশ করে।
ডিভাইস
পেরিফেরাল কম্পিউটারের জন্য ইনপুট/আউটপুট (I/O) ক্ষমতা প্রদান করে। MIDI পেরিফেরাল ও MIDI ডিভাইস শব্দগুলি সাধারণত এমন কোনও হার্ডওয়্যার বা সফ্টওয়্যার মডিউলকে বোঝায় যা MIDI প্রোটোকল মেনে চলে। এই ডকুমেন্টে, MIDI পেরিফেরাল বলতে ফিজিক্যাল এন্টিটি এবং MIDI ডিভাইস বলতে সেই মডিউলকে বোঝায় যা আসলে MIDI প্রয়োগ করে।
পোর্ট
পোর্ট হল কম্পিউটার ও পেরিফেরালের মধ্যে ইন্টারফেস পয়েন্ট।
MIDI 1.0 পোর্ট হিসেবে ফিমেল ৫-পিন DIN সকেট ব্যবহার করে। প্রতিটি পোর্ট হয় আউট (MIDI ডেটার সোর্স), ইন (MIDI ডেটার সিঙ্ক), অথবা থ্রু (এর অর্থ হল ইন যা সরাসরি আউটে রুট করা হয়)।
USB ও BLE-এর মতো অন্যান্য ট্রান্সপোর্ট পোর্ট কনসেপ্টকে আরও প্রসারিত করে।
MIDI ডিভাইসে অন্তত একটি আউট পোর্ট, ইন পোর্ট বা দু'টিই থাকে।
MIDI ডিভাইস প্রতিটি OUT পোর্ট থেকে শুরু হওয়া মেসেজের স্ট্রিম সরবরাহ করে এবং প্রতিটি IN পোর্টে আসা মেসেজের স্ট্রিম গ্রহণ করে। IN এবং OUT শব্দগুলি অবশ্যই একটি পোর্টের সাথে সম্পর্কিত; অন্য পোর্টের দৃষ্টিকোণ থেকে বিপরীত শব্দটি প্রযোজ্য।
কানেকশন
MIDI 1.0 ট্রান্সপোর্টে, কারেন্ট লুপের প্রকৃতির কারণে একটি OUT পোর্ট সর্বাধিক একটি IN বা THRU পোর্টের সাথে কানেক্ট করে। USB ও BLE ট্রান্সপোর্টের ক্ষেত্রে, সবচেয়ে নিচের লেয়ারে একই কথা প্রযোজ্য, যদিও কোনও ইমপ্লিমেন্টেশন মেসেজ স্ট্রিমকে আবার কন্ডিশন করতে পারে যাতে এটিকে একাধিক ইন পোর্টে ব্রডকাস্ট করা যায়।
কেবেল
MIDI 1.0 কেবেল হল তারের ফিজিক্যাল বান্ডেল যা OUT পোর্টকে IN বা THRU পোর্টের সাথে কানেক্ট করে। কেবেলে শুধু ডেটা ট্রান্সফার করা হয়।
মনে রাখবেন: MIDI-তে কিছু নন-স্ট্যান্ডার্ড পরিবর্তন করা হয়েছে যা দুটি অব্যবহৃত পিনের মাধ্যমে পাওয়ার সাপ্লাই করে। এটি ফ্যান্টম পাওয়ার নামে পরিচিত।
USB কেবেল একই রকম, তবে কানেক্টরের বিভিন্ন ধরন আছে, এবং হোস্ট/পেরিফেরাল রোলের মাধ্যমে IN/OUT/THRU কনসেপ্ট প্রতিস্থাপন করা হয়।
USB হোস্ট মোডে কাজ করার সময়, হোস্ট ডিভাইস MIDI পেরিফেরালকে পাওয়ার সাপ্লাই করে। বেশিরভাগ ছোট MIDI পেরিফেরাল একটি USB ইউনিট লোড (১০০ mA) বা তার কম নেয়। তবে, কিছু বড় পেরিফেরাল বা অডিও আউটপুট বা লাইট সহ পেরিফেরাল হোস্ট ডিভাইসের সাপ্লাই করা পাওয়ারের চেয়ে বেশি পাওয়ার প্রয়োজন হয়। আপনার সমস্যা হলে, অন্য MIDI পেরিফেরাল বা পাওয়ার USB হাব ব্যবহার করে দেখুন।
চ্যানেল
প্রতিটি MIDI মেসেজ স্ট্রিম ১৬টি চ্যানেলের মধ্যে মাল্টিপ্লেক্স করা হয়। বেশিরভাগ মেসেজ কোনও নির্দিষ্ট চ্যানেলের উদ্দেশ্যে পাঠানো হয়, তবে এমন মেসেজের ধরনও আছে যা চ্যানেল-নির্দিষ্ট নয়। প্রচলিত প্রথা অনুযায়ী চ্যানেলগুলিকে ১ থেকে ১৬ পর্যন্ত সংখ্যা দিয়ে চিহ্নিত করা হয়, যদিও চ্যানেল ভ্যালু হিসেবে ০ থেকে ১৫ পর্যন্ত সংখ্যা ব্যবহার করা হয়।
অ্যাপ্লিকেশনের যদি ১৬টির বেশি চ্যানেল বা একটি মেসেজ স্ট্রিম সাপোর্ট করতে পারে তার চেয়ে বেশি থ্রুপুট প্রয়োজন হয়, তাহলে একাধিক পোর্ট ব্যবহার করতে হবে।
MIDI 1.0-এ, একাধিক কেবেল দিয়ে পেয়ার করা পোর্ট কানেক্ট করে এটি করা হয়।
USB ট্রান্সপোর্টের মাধ্যমে MIDI-তে, একটি USB এন্ডপয়েন্ট একাধিক পোর্ট সাপোর্ট করতে পারে, প্রতিটি পোর্ট কেবেল নম্বর [sic] দ্বারা শনাক্ত করা হয়। USB MIDI স্পেসিফিকেশন অনুযায়ী, কেবেল নম্বর এন্ডপয়েন্টের মধ্যে ভার্চুয়াল পোর্টকে শনাক্ত করে।
মনে রাখবেন: পোর্ট নম্বর শব্দটি আরও সঠিক হতে পারত, কারণ এটি একটি পোর্টকে শনাক্ত করে।
তাই একটি USB ফিজিক্যাল কেবেল ১৬টি চ্যানেলের একাধিক সেট বহন করতে পারে।
প্ল্যাটফর্ম প্রয়োগ করা
ভূমিকায় উল্লেখ করা হয়েছে যে, এই সাধারণ MIDI কনসেপ্ট সব
ইমপ্লিমেন্টেশনের ক্ষেত্রে প্রযোজ্য। Android
প্ল্যাটফর্মে কনসেপ্টের ব্যাখ্যা পেতে,
android.media.midi-এর জন্য Android MIDI ব্যবহারকারী গাইড দেখুন।