معماری MIDI

این مقاله معماری عمومی MIDI را توصیف می‌کند که مستقل از هرگونه پیاده‌سازی پلاتفرم، API، یا ویژگی‌های مختص پلاتفرم است.

مفاهیم اصلی

رویدادها

پروتکل MIDI برای ارتباط رویدادمحور طراحی شده است. رویداد نشانه‌ای است که چیزی در زمان مشخصی اتفاق افتاده یا خواهد افتاد. رویدادهای MIDI با پیام‌ها، بسته‌های اطلاعاتی اتمی، نشان داده می‌شوند.

حمل‌ونقل

پیام‌های MIDI ازطریق لایه انتقال، که به‌صورت مخفف انتقال نامیده می‌شود، کدبندی و ارسال می‌شوند. این لایه داده‌های MIDI خام را به گیرنده ارسال می‌کند و گیرنده داده‌ها را به پیام‌ها رمزگشایی می‌کند.

انتقال‌دهنده‌های MIDI مبتنی بر سخت‌افزار شامل موارد زیر است:

نمایش پیام

مشخصات انتقال MIDI نحوه انتقال پیام‌ها را شرح می‌دهد. اگرچه بسته‌بندی پیام‌ها در پایین‌ترین سطح مختص انتقال است، در سطح بالاتر برنامه‌ها می‌توانند توالی زمانی مرتب‌شده پیام‌ها را به‌عنوان جریان بایت مشخص‌شده درنظر بگیرند. این کار امکان‌پذیر است زیرا هر پیام حاوی اطلاعات کافی برای تعیین طول کل پیام است، به‌شرطی که ابتدای محدوده پیام مشخص باشد.

اکثر پیام‌های MIDI کوتاه هستند (یک تا سه بایت)، اما امکان ارسال پیام‌های طولانی‌تر ازطریق SysEx وجود دارد.

مهرهای زمان

مهر زمان برچسب اختیاری است که به پیام در مبدأ یا هنگام دریافت، بسته به حمل‌ونقل، پیوست می‌شود. مُهر زمان در واحدهای زمانی مانند ثانیه یا تیک بیان می‌شود.

درصورت عدم وجود مُهر زمان صریح، سیستم باید مُهر زمان پیام بلافاصله قبلی یا زمان فعلی را جایگزین کند. دقت این مُهر زمان، چه صریح و چه ضمنی، جنبه مهمی از قابلیت اطمینان سیستم مبتنی بر MIDI است.

مُهرهای زمان بخشی از پروتکل MIDI 1.0 نیستند. این موارد اغلب به‌عنوان بخشی از یک API خاص پلاتفرم اضافه می‌شوند. حمل‌ونقل BLE دارای مُهرهای زمان است تا زمان‌بندی چندین پیام جداگانه ارسال‌شده در یک بسته BLE را نشان دهد.

دستگاه‌ها

دستگاه جانبی قابلیت ورودی/خروجی (I/O) را برای رایانه فراهم می‌کند. اصطلاحات دستگاه جانبی MIDI و دستگاه MIDI معمولاً به هر سخت‌افزار یا ماژول نرم‌افزاری که از پروتکل MIDI پشتیبانی می‌کند اشاره دارد. در این سند، دستگاه جانبی MIDI به نهاد فیزیکی اشاره دارد و دستگاه MIDI ماژولی را توصیف می‌کند که درواقع MIDI را پیاده‌سازی می‌کند.

درگاه‌ها

درگاه نقطه واسط بین رایانه‌ها و لوازم جانبی است.

‫MIDI 1.0 از یک سوکت DIN پنج پین ماده به‌عنوان درگاه استفاده می‌کند. هر درگاه یا OUT (منبع داده‌های MIDI)، IN (سینک برای داده‌های MIDI)، یا THRU (به‌معنی IN که مستقیماً به OUT هدایت می‌شود) است.

انتقال‌های دیگر مثل USB و BLE مفهوم درگاه را گسترش می‌دهند.

دستگاه MIDI حداقل یک درگاه خروجی، درگاه ورودی، یا هر دو را دارد.

دستگاه MIDI جاری‌سازی(های) پیام‌های منشأگرفته از هر درگاه خروجی را تأمین می‌کند، و جاری‌سازی(های) پیام‌های واردشده به هر درگاه ورودی را دریافت می‌کند. البته اصطلاحات IN و OUT مربوط به یک درگاه است؛ از دیدگاه درگاه دیگر، اصطلاح معکوس اعمال می‌شود.

اتصال

در انتقال MIDI 1.0، یک درگاه OUT حداکثر به یک درگاه IN یا THRU متصل می‌شود، زیرا ماهیت حلقه فعلی این‌گونه است. در انتقال‌های USB و BLE، همین امر در پایین‌ترین لایه صادق است، اگرچه یک پیاده‌سازی ممکن است جریان پیام را دوباره شرطی کند تا بتواند به چندین درگاه IN همه‌فرستی شود.

کابل

کابل MIDI 1.0 مجموعه فیزیکی سیم‌هایی است که درگاه خروجی را به درگاه ورودی یا عبور متصل می‌کند. کابل فقط داده‌ها را منتقل می‌کند.

توجه: اصلاحات غیر استانداردی در MIDI وجود دارد که ازطریق دو پین استفاده‌نشده برق را تأمین می‌کند. این حالت قدرت فانتوم نامیده می‌شود.

کابل USB مشابه است، با این تفاوت که انواع مختلفی از رابط‌ها وجود دارد، و مفهوم IN/OUT/THRU با نقش میزبان/پیرامونی جایگزین می‌شود.

هنگام کار در حالت میزبان USB، دستگاه میزبان برق را به دستگاه جانبی MIDI تأمین می‌کند. بیشتر لوازم جانبی کوچک MIDI یک واحد بار USB (۱۰۰ میلی‌آمپر) یا کمتر مصرف می‌کنند. بااین‌حال، برخی‌از لوازم جانبی بزرگ‌تر، یا لوازم جانبی دارای برونداد صدا یا چراغ، به توان بیشتری نسبت‌به توان تأمین‌شده توسط دستگاه میزبان نیاز دارند. اگر با مشکل مواجه شدید، لوازم جانبی MIDI دیگری یا هاب USB دارای منبع تغذیه را امتحان کنید.

کانال

هر جریان پیام MIDI بین ۱۶ کانال تسهیم می‌شود. بیشتر پیام‌ها به کانال خاصی هدایت می‌شوند، اما انواع پیام‌هایی وجود دارد که مختص کانال نیستند. به‌طور قراردادی کانال‌ها از یک تا ۱۶ شماره‌گذاری می‌شوند، هرچند با مقادیر کانال از صفر تا ۱۵ نشان داده می‌شوند.

اگر برنامه به بیش‌از ۱۶ کانال یا توان عملیاتی بالاتری نیاز داشته باشد که یک جاری‌سازی پیام بتواند پشتیبانی کند، باید از چندین درگاه استفاده شود.

در MIDI 1.0، این کار با چندین کابل که جفت پورت‌ها را به هم متصل می‌کنند، انجام می‌شود.

در انتقال MIDI ازطریق USB، یک نقطه پایانی USB می‌تواند از چندین درگاه پشتیبانی کند که هرکدام با یک شماره کابل [sic] شناسایی می‌شوند. طبق مشخصات USB MIDI، شماره کابل درگاه مجازی را در نقطه پایانی شناسایی می‌کند.

توجه: شماره درگاه اصطلاح دقیق‌تری است، چون درگاه را شناسایی می‌کند.

بنابراین یک کابل فیزیکی USB می‌تواند بیش‌از یک مجموعه ۱۶ کانالی را حمل کند.

پیاده‌سازی پلاتفرم

همان‌طور که در مقدمه ذکر شد، این مفاهیم عمومی MIDI برای همه پیاده‌سازی‌ها اعمال می‌شود. برای تفسیر مفاهیم در پلاتفرم Android، به راهنمای کاربر Android MIDI برای android.media.midi مراجعه کنید.