MIDI

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

از اندروید ۱۳، پشتیبانی از MIDI 2.0 به انتقال USB اضافه شد. MIDI 2.0 یک استاندارد MIDI جدیدتر است که در سال ۲۰۲۰ تعریف شده است. این پروتکل ویژگی‌هایی مانند ارتباط دو طرفه، وضوح بالاتر و تبادل ویژگی را اضافه می‌کند. MIDI 2.0 از طریق حالت میزبان USB همیشه زمانی فعال است که پشتیبانی MIDI در پلتفرم فعال باشد. MIDI 2.0 از طریق انتقال‌های مجازی در اندروید ۱۵ و بالاتر پشتیبانی می‌شود.

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

MIDI برای NDK

اندروید ۱۰ انتقال برنامه‌های صوتی حرفه‌ای با استفاده از MIDI به پلتفرم اندروید را آسان‌تر می‌کند.

AMidi یک API NDK است که به توسعه‌دهندگان اپلیکیشن امکان ارسال و دریافت داده‌های MIDI را با کد C/C++ می‌دهد.

برنامه‌های MIDI اندروید معمولاً از رابط برنامه‌نویسی کاربردی midi برای ارتباط با سرویس MIDI اندروید استفاده می‌کنند. برنامه‌های MIDI در درجه اول به کلاس MidiManager برای کشف، باز کردن و بستن یک یا چند شیء MidiDevice و انتقال داده‌ها به و از هر دستگاه از طریق پورت‌های ورودی و خروجی MIDI دستگاه وابسته هستند.

حمل و نقل

لایه انتقال فیزیکی که در MIDI 1.0 اصلی مشخص شده است، یک حلقه جریان با کانکتور DIN 5 پین است.

از زمان MIDI 1.0، انتقال‌های اضافی تعریف شده‌اند، از جمله MIDI از طریق USB و MIDI از طریق بلوتوث کم‌مصرف (BLE) .

MIDI برای اندروید

اندروید از USB On-The-Go پشتیبانی می‌کند، که به دستگاه اندروید اجازه می‌دهد به عنوان یک میزبان USB برای راه‌اندازی لوازم جانبی USB عمل کند. APIهای حالت میزبان USB به توسعه‌دهندگان اجازه می‌دهند MIDI را از طریق USB در سطح برنامه پیاده‌سازی کنند، اما تا همین اواخر هیچ API پلتفرم داخلی برای MIDI وجود نداشت.

با انتشار اندروید ۶.۰ (مارشمالو)، سازندگان دستگاه می‌توانند پشتیبانی اختیاری از MIDI را در پلتفرم فعال کنند. اندروید مستقیماً از USB، BLE و انتقال‌های مجازی (بین‌برنامه‌ای) پشتیبانی می‌کند. اندروید از MIDI 1.0 از طریق یک آداپتور خارجی پشتیبانی می‌کند.

برای جزئیات بیشتر در مورد برنامه‌نویسی برنامه با رابط‌های برنامه‌نویسی کاربردی MIDI، به بسته android.media.midi مراجعه کنید.

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

فعال کردن انتقال‌های MIDI 1.0

پیاده‌سازی MIDI 1.0 برای حالت میزبان USB و انتقال در حالت جانبی USB به ALSA وابسته است. ALSA برای انتقال‌های BLE و مجازی استفاده نمی‌شود.

حالت میزبان USB

برای فعال کردن MIDI برای حالت میزبان USB، ابتدا از حالت میزبان USB به طور کلی پشتیبانی کنید و سپس CONFIG_SND_RAWMIDI و CONFIG_SND_USB_MIDI در پیکربندی هسته خود فعال کنید.

انتقال MIDI از طریق USB رسماً توسط استاندارد Universal Serial Bus Device Definition for MIDI Devices Release 1.0 در اول نوامبر ۱۹۹۹ که توسط انجمن پیاده‌سازی USB منتشر شده است، تعریف شده است.

حالت جانبی USB

برای فعال کردن MIDI برای حالت جانبی USB، ممکن است لازم باشد پچ‌هایی را در هسته لینوکس خود اعمال کنید تا drivers/usb/gadget/f_midi.c را در درایور ابزار USB ادغام کنید. این پچ‌ها برای هسته لینوکس نسخه ۳.۱۰ در دسترس هستند. این پچ‌ها هنوز برای ConfigFs (معماری جدیدی برای درایورهای ابزار USB) به‌روزرسانی نشده‌اند و در kernel.org بالادستی نیز ادغام نشده‌اند.

پچ‌ها به ترتیب اعمال تغییرات برای درخت هسته در شاخه project kernel/common branch android-3.10 نشان داده شده‌اند:

  1. https://android-review.googlesource.com/#/c/127450/
  2. https://android-review.googlesource.com/#/c/127452/
  3. https://android-review.googlesource.com/#/c/143714/

همچنین باید یکی از موارد زیر را انجام دهید:

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

بل

MIDI over BLE همیشه فعال است، البته به شرطی که دستگاه از BLE پشتیبانی کند.

مجازی (اینتراپ)

انتقال مجازی (بین‌برنامه‌ای) همیشه فعال است.

ادعای ویژگی

برنامه‌ها می‌توانند با استفاده از ویژگی android.software.midi وجود پشتیبانی MIDI را بررسی کنند.

برای استفاده از پشتیبانی MIDI، این خط را به device.mk خود اضافه کنید:

PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.software.midi.xml:system/etc/permissions/android.software.
midi.xml

برای اطلاعات مربوط به الزامات مربوط به استفاده از این ویژگی، به سند تعریف سازگاری اندروید (CDD) مراجعه کنید.

اشکال‌زدایی در حالت میزبان

در حالت میزبان USB، اشکال‌زدایی Android Debug Bridge (adb) از طریق USB در دسترس نیست. برای یک جایگزین، به بخش استفاده بی‌سیم Android Debug Bridge مراجعه کنید.