ميدي

الواجهة الرقمية للآلات الموسيقية (MIDI) هي بروتوكول قياسي لربط أجهزة الكمبيوتر بالآلات الموسيقية وإضاءة المسرح والوسائط الأخرى الموجهة نحو الوقت.

بدءًا من Android 13، تمت إضافة دعم MIDI 2.0 إلى وسيلة النقل USB. MIDI 2.0 هو معيار MIDI أحدث تم تحديده في عام 2020. يضيف هذا البروتوكول ميزات مثل الاتصال ثنائي الاتجاه والدقة العالية وتبادل الخصائص. يتم تمكين MIDI 2.0 من خلال وضع مضيف USB دائمًا عند تمكين دعم MIDI على النظام الأساسي.

بالمعنى الدقيق للكلمة، MIDI لا علاقة لها بالصوت. ولكن نظرًا لاستخدام MIDI بشكل شائع مع الموسيقى، فقد تم وضع هذه المقالة في قسم الصوت.

MIDI لـ NDK

يعمل Android 10 على تسهيل نقل التطبيقات الصوتية الاحترافية باستخدام MIDI إلى نظام Android الأساسي.

AMidi هي واجهة NDK API التي تمنح مطوري التطبيقات القدرة على إرسال واستقبال بيانات MIDI باستخدام رمز C/C++.

تستخدم تطبيقات Android MIDI عادةً واجهة برمجة التطبيقات midi للتواصل مع خدمة Android MIDI. تعتمد تطبيقات MIDI بشكل أساسي على فئة MidiManager لاكتشاف كائن MidiDevice واحد أو أكثر وفتحه وإغلاقه، وتمرير البيانات من وإلى كل جهاز عبر منافذ إدخال وإخراج MIDI الخاصة بالجهاز.

وسائل النقل

طبقة النقل المادية المحددة في MIDI 1.0 الأصلي هي حلقة حالية بموصل DIN ذو 5 سنون .

منذ MIDI 1.0، تم تعريف وسائل نقل إضافية، بما في ذلك MIDI عبر USB وMIDI عبر Bluetooth منخفض الطاقة (BLE) .

ميدي لالروبوت

يدعم Android USB On-The-Go ، والذي يسمح لجهاز Android بالعمل كمضيف USB لتشغيل الأجهزة الطرفية USB. تسمح واجهات برمجة التطبيقات لوضع مضيف USB للمطورين بتنفيذ MIDI عبر USB على مستوى التطبيق، ولكن حتى وقت قريب لم تكن هناك واجهات برمجة تطبيقات مدمجة للنظام الأساسي لـ MIDI.

بدءًا من إصدار Android 6.0 (Marshmallow)، يمكن لمصنعي الأجهزة تمكين دعم MIDI الاختياري في النظام الأساسي. يدعم Android مباشرة وسائل النقل USB وBLE والظاهرية (interapp). يدعم Android MIDI 1.0 من خلال محول خارجي.

للحصول على تفاصيل حول برمجة التطبيقات باستخدام واجهات برمجة التطبيقات MIDI، راجع الحزمة android.media.midi .

يناقش الجزء المتبقي من هذه المقالة كيف يمكن لمصنع أجهزة Android تمكين دعم MIDI في النظام الأساسي.

تمكين وسائل النقل MIDI 1.0

يعتمد تطبيق MIDI 1.0 على ALSA لوضع مضيف USB وعمليات النقل في الوضع الطرفي USB. لا يتم استخدام ALSA في BLE ووسائل النقل الافتراضية.

وضع مضيف USB

لتمكين MIDI لوضع مضيف USB، قم أولاً بدعم وضع مضيف USB بشكل عام، ثم قم بتمكين CONFIG_SND_RAWMIDI و CONFIG_SND_USB_MIDI في تكوين kernel الخاص بك. راجع تكوين Android Kernel.

يتم تعريف MIDI عبر نقل USB رسميًا من خلال تعريف فئة جهاز الناقل التسلسلي العالمي لإصدار أجهزة MIDI الإصدار 1.0 في 1 نوفمبر 1999، وهو المعيار المنشور بواسطة USB Implementers Forum, Inc.

الوضع الطرفي USB

لتمكين MIDI لوضع USB الطرفي، قد تحتاج إلى تطبيق تصحيحات على Linux kernel الخاص بك لدمج drivers/usb/gadget/f_midi.c في برنامج تشغيل أداة USB. تتوفر هذه التصحيحات لإصدار Linux kernel 3.10. لم يتم تحديث هذه التصحيحات حتى الآن لـ ConfigFs (بنية جديدة لبرامج تشغيل أدوات USB)، كما لم يتم دمجها في موقع kernel.org الرئيسي.

يتم عرض التصحيحات بترتيب الالتزام لشجرة kernel في مشروع 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/

تحتاج أيضًا إلى القيام بأي مما يلي:

  • انتقل إلى الإعدادات > خيارات المطور > الشبكات وحدد مربع MIDI في مربع الحوار تحديد تكوين USB.
  • أثناء توصيله بمضيف USB، اسحب لأسفل من أعلى الشاشة، وحدد إدخال USB لـ ، ثم حدد MIDI .

بليه

يتم تمكين MIDI عبر BLE دائمًا، بشرط أن يدعم الجهاز BLE.

الظاهري (التطبيق البيني)

يتم تمكين النقل الافتراضي (interapp) دائمًا.

المطالبة بالميزة

يمكن للتطبيقات فحص وجود دعم MIDI باستخدام ميزة android.software.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 للحصول على بديل.