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 平台。

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_RAWMIDICONFIG_SND_USB_MIDI 。請參閱Android 內核配置。

USB 上的 MIDI 傳輸由USB Implementers Forum, Inc1999 年 11 月 1 日發布的 MIDI 設備通用序列匯流排設備類別定義 1.0 版標準正式定義。

USB週邊模式

若要為 USB 週邊模式啟用 MIDI,您可能需要對 Linux 核心套用補丁,以將drivers/usb/gadget/f_midi.c整合到 USB 小工具驅動程式中。這些補丁適用於 Linux 核心版本 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/

您還需要執行以下任一操作:

  • 前往「設定」>「開發者選項」>「網路」 ,然後勾選「選擇 USB 設定」對話方塊中的 MIDI 方塊。
  • 連接到 USB 主機後,從螢幕頂部下拉,選擇USB條目,然後選擇MIDI

低功耗藍牙

只要設備支援 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 偵錯橋接器 (adb) 偵錯。有關替代方案,請參閱 Android 調試橋的無線使用部分。