樂器數位介面 (MIDI) 是一種標準通訊協定,可將電腦與樂器、舞台燈光和其他時間導向媒體連結。
自 Android 13 起,USB 傳輸功能已新增 MIDI 2.0 支援功能。MIDI 2.0 是 2020 年定義的新 MIDI 標準。這個通訊協定新增了雙向通訊、更高解析度和資源交換等功能。在平台上啟用 MIDI 支援功能時,一律會啟用 USB 主機模式的 MIDI 2.0。
嚴格來說,MIDI 與音訊無關。不過,MIDI 通常用於音樂,因此本文會放在音訊部分。
NDK 適用的 MIDI
在 Android 10 中,您可以更輕鬆地將使用 MIDI 的專業音訊應用程式移植至 Android 平台。
AMidi
是 NDK API,可讓應用程式開發人員透過 C/C++ 程式碼傳送及接收 MIDI 資料。
Android MIDI 應用程式通常會使用
midi
API 與 Android MIDI 服務通訊。MIDI 應用程式主要仰賴
MidiManager
類別來尋找、開啟及關閉一或多個
MidiDevice
物件,並透過裝置的 MIDI 輸入和輸出通訊埠,在裝置間傳遞資料。
運輸
在原始 MIDI 1.0 中指定的實體傳輸層,是使用 5 針 DIN 連接器的電流迴路。
自 MIDI 1.0 以來,已定義其他傳輸方式,包括 MIDI over USB 和 MIDI over 藍牙低功耗 (BLE)。
Android 版 MIDI
Android 支援 USB On-The-Go,可讓 Android 裝置充當 USB 主機,驅動 USB 外接裝置。USB 主機模式 API 可讓開發人員在應用程式層級實作 MIDI 和 USB,但直到最近,MIDI 才有內建平台 API。
自 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 主機模式
如要為 USB 主機模式啟用 MIDI,請先一般支援 USB 主機模式,然後在核心設定中啟用 CONFIG_SND_RAWMIDI
和 CONFIG_SND_USB_MIDI
。
MIDI 裝置的通用串列匯流排裝置類別定義 (1999 年 11 月 1 日發布第 1.0 版)標準由 USB 實作者論壇公司發布,正式定義 MIDI 透過 USB 傳輸。
USB 周邊裝置模式
如要啟用 USB 周邊模式的 MIDI,您可能需要為 Linux 核心套用修正程式,將 drivers/usb/gadget/f_midi.c
整合至 USB 小工具驅動程式。這些修補程式適用於 Linux kernel 3.10 版。這些修正尚未針對 ConfigFs (USB 小工具驅動程式的新架構) 進行更新,也未在上游 kernel.org 中合併。
以下是專案 kernel/common
分支版本 android-3.10
中,核心樹狀結構的修補程式順序:
- https://android-review.googlesource.com/#/c/127450/
- https://android-review.googlesource.com/#/c/127452/
- https://android-review.googlesource.com/#/c/143714/
您也必須採取下列任一做法:
- 依序前往「設定」>「開發人員選項」>「網路」,然後在「Select USB Configuration」對話方塊中勾選 MIDI 的方塊。
- 連接至 USB 主機時,從螢幕頂端向下滑動,選取「USB for」項目,然後選取「MIDI」。
BLE
只要裝置支援 BLE,就會一律啟用 MIDI over 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 主機模式下,無法透過 USB 進行 Android Debug Bridge (adb) 偵錯。如需替代方案,請參閱 Android Debug Bridge 的「 無線使用」一節。