MIDI

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

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

למען האמת, 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 המקורי היא לולאת זרם עם מחבר DIN 5-pin.

מאז MIDI 1.0, הוגדרו אמצעי העברה נוספים, כולל MIDI דרך USB ו-MIDI דרך Bluetooth עם צריכת אנרגיה נמוכה (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 באמצעות מתאם חיצוני.

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

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

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

כדי להפעיל את MIDI במצב USB היקפי, יכול להיות שתצטרכו להחיל תיקונים בליבה של Linux כדי לשלב את drivers/usb/gadget/f_midi.c במנהל ההתקן של גאדג'ט ה-USB. התיקונים האלה זמינים לליבה של Linux בגרסה 3.10. התיקונים האלה עדיין לא עודכנו עבור ConfigFs (ארכיטקטורה חדשה לדרייברים של גאדג'טים USB), והם לא מוזגו ב-upstream‏ 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/

צריך גם לבצע אחת מהפעולות הבאות:

  • עוברים אל Settings > Developer options > Networking (אפשרויות למפתחים > Networking) ומסמנים את התיבה לצד MIDI בתיבת הדו-שיח Select USB Configuration (בחירת תצורה של USB).
  • כשהמכשיר מחובר למארח ה-USB, גוררים למטה מהחלק העליון של המסך, בוחרים את האפשרות USB for ואז בוחרים באפשרות MIDI.

BLE

MIDI דרך 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

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

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

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