MIDI

ממשק דיגיטלי לכלים מוזיקליים (MIDI) הוא פרוטוקול סטנדרטי לחיבור בין מחשבים לבין כלי נגינה, תאורה לבמה ומדיה אחרת שמתבססת על זמן.

החל מ-Android 13, נוספת תמיכה ב-MIDI 2.0 להעברה דרך USB. ‫MIDI 2.0 הוא תקן MIDI חדש יותר שהוגדר בשנת 2020. הפרוטוקול הזה מוסיף תכונות כמו תקשורת דו-כיוונית, רזולוציה גבוהה יותר והחלפת מאפיינים. ‫MIDI 2.0 דרך מצב מארח USB תמיד מופעל כשמופעלת תמיכה ב-MIDI בפלטפורמה. ‫MIDI 2.0 דרך virtual transports נתמך ב-Android 15 ומעלה.

למעשה, MIDI לא קשור לאודיו. אבל מכיוון ש-MIDI משמש בדרך כלל למוזיקה, המאמר הזה מופיע בקטע בנושא אודיו.

‫MIDI ל-NDK

ב-Android 10 קל יותר להעביר אפליקציות אודיו מקצועיות באמצעות MIDI לפלטפורמת Android.

AMidi הוא NDK API שמאפשר למפתחי אפליקציות לשלוח ולקבל נתוני MIDI באמצעות קוד C/C++.

אפליקציות MIDI ל-Android משתמשות בדרך כלל ב-API‏ midi כדי לתקשר עם שירות ה-MIDI ל-Android. אפליקציות MIDI מסתמכות בעיקר על המחלקה MidiManager כדי לגלות, לפתוח ולסגור אובייקט אחד או יותר של MidiDevice ולהעביר נתונים אל כל מכשיר וממנו דרך יציאות הקלט והפלט של ה-MIDI במכשיר.

תחבורה

שכבת התעבורה הפיזית שצוינה ב-MIDI 1.0 המקורי היא לולאת זרם עם מחבר 5-pin DIN.

מאז MIDI 1.0, הוגדרו פרוטוקולי העברה נוספים, כולל MIDI over USB ו-MIDI over Bluetooth Low Energy (BLE).

‫MIDI ל-Android

‫Android תומך ב-USB On-The-Go, שמאפשר למכשיר Android לפעול כמארח USB כדי להפעיל ציוד היקפי של USB. ממשקי ה-API של מצב המארח ב-USB מאפשרים למפתחים להטמיע MIDI דרך USB ברמת האפליקציה, אבל עד לאחרונה לא היו ממשקי API מובנים של פלטפורמת MIDI.

החל מגרסה Android 6.0 (Marshmallow), יצרני מכשירים יכולים להפעיל תמיכה אופציונלית ב-MIDI בפלטפורמה. ‫Android תומך ישירות ב-USB, ב-BLE ובשידורים וירטואליים (בין אפליקציות). ‫Android תומך ב-MIDI 1.0 באמצעות מתאם חיצוני.

פרטים על תכנות אפליקציות באמצעות ממשקי ה-API של 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 בהגדרות הליבה.

התקן MIDI over USB מוגדר באופן רשמי על ידי Universal Serial Bus Device Class Definition for MIDI Devices Release 1.0 Nov 1, 1999 שפורסם על ידי ארגון תקינת ה-USB העולמי.

מצב ציוד היקפי בחיבור USB

כדי להפעיל MIDI למצב של ציוד היקפי USB, יכול להיות שתצטרכו להחיל תיקונים על ליבת Linux כדי לשלב את drivers/usb/gadget/f_midi.c במנהל ההתקן של גאדג'ט ה-USB. התיקונים האלה זמינים לגרסה 3.10 של ליבת Linux. התיקונים האלה עדיין לא עודכנו עבור ConfigFs (ארכיטקטורה חדשה למנהלי התקנים של גאדג'טים ל-USB), והם גם לא מוזגו ב-kernel.org.

התיקונים מוצגים בסדר ההתחייבות לעץ הליבה בסניף android-3.10 של פרויקט kernel/common:

  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 for ואז בוחרים באפשרות MIDI.

BLE

האפשרות MIDI over BLE מופעלת תמיד, בתנאי שהמכשיר תומך ב-BLE.

וירטואלי (בין אפליקציות)

ההעברה הווירטואלית (בין אפליקציות) מופעלת תמיד.

תביעת בעלות על התכונה

אפליקציות יכולות לבדוק אם יש תמיכה ב-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

מידע על הדרישות להפעלת התכונה מופיע במסמך ההגדרה של תאימות (CDD) של Android.

ניפוי באגים במצב מארח

בזמן שמצב מארח USB מופעל, ניפוי באגים באמצעות Android Debug Bridge‏ (adb) דרך USB לא זמין. אפשר לעיין בקטע שימוש ב-Wireless ב-Android Debug Bridge כדי לקבל מידע על חלופה.