MIDI

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

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

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

MIDI برای NDK

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

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

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

حمل‌ونقل‌ها

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

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

ام‌آی‌دی‌آی برای Android

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

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

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

بقیه این مقاله درباره نحوه فعال کردن پشتیبانی از MIDI در پلاتفرم توسط سازنده دستگاه Android بحث می‌کند.

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

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

حالت میزبان USB

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

انتقال MIDI ازطریق USB به‌طور رسمی توسط استاندارد تعریف کلاس دستگاه گذرگاه سریال عمومی برای دستگاه‌های MIDI نسخه ۱.۰، ۱ نوامبر ۱۹۹۹ منتشرشده توسط USB Implementers Forum, Inc تعریف شده است.

حالت جانبی USB

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

وصله‌ها به‌ترتیب ثبت برای درخت هسته در پروژه kernel/common شاخه 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/

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

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

BLE

MIDI ازطریق 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

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

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

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