MIDI

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

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

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

MIDI برای NDK

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

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

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

حمل و نقل

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

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

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

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

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

برای جزئیات بیشتر در مورد برنامه نویسی برنامه با API های 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 به طور رسمی توسط تعریف کلاس دستگاه اتوبوس سریال جهانی برای دستگاه‌های MIDI نسخه 1.0 در 1 نوامبر 1999 استاندارد منتشر شده توسط USB Implementers Forum, Inc. تعریف شده است.

حالت جانبی USB

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

وصله ها به ترتیب commit برای درخت هسته در پروژه 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/

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

  • به Settings > Developer options > Networking بروید و کادر MIDI را در کادر گفتگوی Select USB Configuration علامت بزنید.
  • در حالی که به میزبان USB متصل هستید، از بالای صفحه به پایین بکشید، ورودی USB را برای و سپس MIDI را انتخاب کنید.

BLE

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

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

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

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