樂器數位介面 (MIDI) 是將電腦與樂器、舞台燈光和其他時間導向媒體互連的標準通訊協定。
自 Android 13 起,USB 傳輸功能新增 MIDI 2.0 支援。MIDI 2.0 是 2020 年定義的最新 MIDI 標準。此通訊協定新增了雙向通訊、更高解析度和屬性交換等功能。在平台上啟用 MIDI 支援時,系統一律會透過 USB 主機模式啟用 MIDI 2.0。Android 15 以上版本支援透過虛擬傳輸的 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 推出後,又定義了其他傳輸方式,包括透過 USB 傳輸 MIDI 和透過藍牙低功耗 (BLE) 傳輸 MIDI。
Android 版 MIDI
Android 支援 USB On-The-Go,可讓 Android 裝置做為 USB 主機,驅動 USB 周邊裝置。USB 主機模式 API 可讓開發人員在應用程式層級透過 USB 實作 MIDI,但直到最近,平台都沒有內建的 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
。
USB 傳輸 MIDI 的正式定義,請參閱 USB Implementers Forum, Inc 發布的「Universal Serial Bus Device Class Definition for MIDI Devices Release 1.0 Nov 1, 1999」標準。
USB 周邊裝置模式
如要為 USB 周邊裝置模式啟用 MIDI,您可能需要將修補程式套用至 Linux 核心,以便將 drivers/usb/gadget/f_midi.c
整合至 USB 小工具驅動程式。這些修補程式適用於 Linux 核心 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/
此外,您也必須採取下列任一做法:
- 依序前往「設定」>「開發人員選項」>「網路」,然後在「選取 USB 設定」對話方塊中勾選「MIDI」核取方塊。
- 連接 USB 主機時,從螢幕頂端向下滑動,選取「USB 用途」項目,然後選取「MIDI」。
BLE
只要裝置支援 BLE,系統一律會啟用透過 BLE 傳輸 MIDI 的功能。
虛擬 (應用程式間)
虛擬 (應用程式間) 傳輸功能一律會啟用。
申請使用這項功能
應用程式可以使用 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 的「 無線使用方式」一節。