MIDI(Musical Instrument Digital Interface)は、コンピュータを楽器、舞台照明、その他の時間指向メディアと相互接続するための標準プロトコルです。
厳密に言えば、MIDI はオーディオとは無関係です。しかし、MIDI は音楽で使用されることが多いため、オーディオ セクションに含まれるものとしてこの記事で扱っています。
NDK 用 MIDI
Android 10 では、MIDI を使用してプロ用のオーディオ アプリを Android プラットフォームに簡単に移行できます。
AMidi
は、アプリのデベロッパーが C/C++ コードで MIDI データを送受信できるようにする NDK API です。
通常、Android MIDI アプリは
midi
API を使用して Android MIDI サービスと通信します。MIDI アプリは主に
MidiManager
クラスを利用して 1 つ以上の
MidiDevice
オブジェクトの検出、開始、終了を行い、デバイスの MIDI 入出力ポートを介して各デバイスとのデータの送受信を行います。
トランスポート
オリジナルの MIDI 1.0 で使用される物理トランスポート層は、5 ピン DIN コネクタ付きの電流ループです。
MIDI 1.0 以降では、USB 経由の MIDI や Bluetooth Low Energy(BLE)経由の MIDI など、追加のトランスポートが定義されています。
Android 用 MIDI
Android は USB On-The-Go をサポートしているため、Android デバイスは USB 周辺機器を駆動させる USB ホストとして機能します。USB ホストモードの API を使用すると、デベロッパーはアプリケーション レベルで USB over MIDI を実装できますが、最近まで MIDI 用の組み込みプラットフォーム API は用意されていませんでした。
Android 6.0(Marshmallow)リリース以降では、デバイス メーカーがプラットフォームで MIDI のサポート(オプション)を有効にできるため、Android が USB、BLE、仮想アプリ間の転送を直接サポートします。また、Android は外部アダプターを介して MIDI 1.0 をサポートします。
MIDI API を使用したアプリケーション プログラミングについて詳しくは、android.media.midi
パッケージを参照してください。
この記事の後半部分では、Android デバイス メーカーがプラットフォームで MIDI のサポートを有効にする方法について説明します。
トランスポートの有効化
MIDI の実装は、ALSA の USB ホストモードと USB 周辺機器モードのトランスポートに応じて異なります。ALSA は、BLE および仮想トランスポートには使用されません。
USB ホストモード
USB ホストモードで MIDI を有効にするには、最初に一般的な USB ホストモードのサポートを有効にしてから、カーネル構成で CONFIG_SND_RAWMIDI
と CONFIG_SND_USB_MIDI
を有効にします。詳しくは、Android カーネル設定をご覧ください。
MIDI over USB トランスポートは、USB インプリメンターズ フォーラムが発行した MIDI デバイスのユニバーサル シリアル バス デバイス クラス定義(1999 年 11 月 1 日)という規格によって正式に定義されています。
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 をサポートしている場合、MIDI over BLE は常に有効になります。
仮想アプリ(Inter-App)
仮想アプリ(Inter-App)トランスポートは常に有効です。
機能サポートの実装
アプリは、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 Compatibility Definition Document(CDD)を参照してください。
ホストモードでのデバッグ
USB ホストモードでは、USB 経由の Android Debug Bridge(adb)デバッグは利用できません。代替方法については、Android Debug Bridge のワイヤレスでの使用セクションを参照してください。