MIDI

樂器數位介面 (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 平台。

AMidiNDK 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 可讓開發人員在應用程式層級實作 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_RAWMIDICONFIG_SND_USB_MIDI。請參閱「Android 核心設定」一文。

透過 USB 傳輸的 MIDI 正式定義,是由 USB Implementers Forum, Inc 發布的 MIDI 裝置版本 1.0 11.0 1, 1, 1.0 通用序列匯流排裝置類別定義正式定義。

USB 週邊裝置模式

如要為 USB 周邊模式啟用 MIDI,您可能需要為 Linux 核心套用修正程式,將 drivers/usb/gadget/f_midi.c 整合至 USB 小工具驅動程式。這些修補程式適用於 Linux kernel 3.10 版。這些修正尚未針對 ConfigFs (USB 小工具驅動程式的新架構) 進行更新,也未在上游 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/

您也必須執行下列其中一項操作:

  • 依序前往「設定」>「開發人員選項」>「網路」,然後在「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 的「 無線使用情形」一節。