ממשק דיגיטלי לכלים מוזיקליים (MIDI) הוא פרוטוקול סטנדרטי לחיבור בין מחשבים לבין כלי נגינה, תאורה לבמה ומדיה אחרת שמתבססת על זמן.
החל מ-Android 13, נוספת תמיכה ב-MIDI 2.0 להעברה ב-USB. MIDI 2.0 הוא תקן MIDI חדש יותר שהוגדר בשנת 2020. הפרוטוקול הזה מוסיף תכונות כמו תקשורת דו-כיוונית, רזולוציה גבוהה יותר והחלפת נכסים. MIDI 2.0 דרך מצב מארח USB תמיד מופעל כשמופעלת תמיכה ב-MIDI בפלטפורמה. MIDI 2.0 דרך העברות וירטואליות נתמך ב-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 המקורי היא לולאת זרם עם מחבר DIN בעל 5 פינים.
מאז 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 באמצעות מתאם חיצוני.
פרטים על תכנות אפליקציות באמצעות ממשקי ה-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 Implementers Forum, Inc.
מצב ציוד היקפי בחיבור USB
כדי להפעיל MIDI למצב ציוד היקפי USB, יכול להיות שתצטרכו להחיל תיקונים על ליבת Linux כדי לשלב את drivers/usb/gadget/f_midi.c
במנהל ההתקן של גאדג'ט ה-USB. התיקונים האלה זמינים לגרסה 3.10 של ליבת Linux. התיקונים האלה עדיין לא עודכנו עבור ConfigFs (ארכיטקטורה חדשה של מנהלי התקנים של גאדג'טים ל-USB), והם גם לא מוזגו ב-kernel.org.
התיקונים מוצגים בסדר של ביצוע השינויים בעץ הליבה בסניף android-3.10
של פרויקט kernel/common
:
- https://android-review.googlesource.com/#/c/127450/
- https://android-review.googlesource.com/#/c/127452/
- https://android-review.googlesource.com/#/c/143714/
בנוסף, צריך לבצע אחת מהפעולות הבאות:
- עוברים אל הגדרות > אפשרויות למפתחים > רשת ומסמנים את התיבה MIDI בתיבת הדו-שיח 'בחירת הגדרת USB'.
- בזמן שהמכשיר מחובר למארח ה-USB, מחליקים למטה מחלקו העליון של המסך, בוחרים באפשרות USB ל ואז בוחרים באפשרות 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 לא זמין. אפשר לעיין בקטע שימוש אלחוטי ב-Android Debug Bridge כדי לקבל מידע על חלופה.