BLE-MIDIをSC-04E Dirty Unicornsで使う

 SC-04EをカスタムROMのDirty UnicornsのAndroid 7.1.2にしたのだけど、Android 6.0(Marshmallow)以降で使えるというBLE-MIDI(MIDI over Bluetooth LE / Bluetooth MIDI)が使えない。いろいろ調べて、なんとか動くようにした。という話。長い。
 きっかけは「Chrome 62 on Android M以降でnative MIDI APIの利用が始まります」という記事を読んだこと。それならということで、Chrome Devを入れて試すも、ポートに何も出ず。Bluetoothの設定でQUICCO SOUND mi.1とのペアリングが済んでるにも関わらず、だ。
 で、調べると「MIDI BLE Connect」というアプリがあり、これで認識させてから、他のMIDI関連アプリを起動すると、BLE-MIDIで接続されたデバイスが見えるということがわかる。
 Adafruitのデバイスを使うための記事「Wireless UNTZtrument Using BLE MIDI」に出ていた。
 「BLE MIDI Connect」と「General MIDI Synth」を使うという例だ。
 しかし、両アプリともGoogle Playで探しても出てこない。上記ページのリンクから開くと、アプリが出てくるものの「この端末には対応していない」みたいなことを言われる。「このアプリはお使いの端末に対応していません。」だったかも。
 あらら。


 カスタムROMだからなのか、SC-04Eだからなのか? それとも日本からはアクセスできないとかか? わからないので、とりあえず、怪しげなサイトからMIDI BLE Connectのapkファイルをダウンロードして試す。起動はするものの、「MIDI not supported」と言われる。これはOSのMIDI機能(native MIDI?)が機能してないっぽい。
 だいたい、上記2つのアプリのレビューを見ると、日本語のものもあるので、国の規制はないんだろう。これは端末の状態か何かを見てGoogle Playが表示しないようになってるんだろうなあ。という、何も解決につながらない結論に。
 困ったので、今のよりも新しいカスタムROMがないかと探したら、あった。今使っているやつのより新しい(ずっと更新されているようだ。ありがとうございます)。とりあえず、インストール(その話は一つ前でした)。しかし、ダメ。結果は変わらず。
 さらに調べる。
 こんなページに行き当たる。
 「MIDI | Android Open Source Project
 これによれば、MIDIサポートを加えるには、device.mkというファイルに2行追加すればいいらしい。なんのことやらわからない。OSをビルドする際のメイクファイルなのか? OSのビルドなんてまったくわからない。
 とはいえ、単に、android.software.midi.xmlってファイルをしかるべきところに加えるってことかと、勝手に解釈。
 このファイルが置かれるべきところはどこか? おそらく「system/etc/permissions/」なんだろう。
 で、このファイルはどこにあるのか? ここか。
 ファイルの中身が書かれている。この中身を新規に作ったファイルにコピペしてandroid.software.midi.xmlとする。単なる宣言とか定義みたいなやつなので、これのほかにも何かが必要な気もする。それでもとりあえず、これをAndroidに突っ込んでみる。Root Explorer的なアプリでコピー(もちろん、すでにrootedな状態で)。でもって、そのディレクトリにあるほかのファイルと同じ属性(rw/r/r)にして、再起動。
 MIDI BLE Connectを起動。「MIDI not supported」の文字が出てこない。これは期待できそう。
 続いて、MIDIデバイス化したmicro:bitを接続してみる。しかし、同アプリからは認識されず。がーん。
 ここでめげずにmicro:bitを削除してmi.1を接続。すると、MIDI BLE Connectから認識された。ナイス! この状態でGeneral MIDI Synthesizerを起動すると、mk.1が認識される。mi.1をつないだMIDIキーボードを弾くと、SC-04Eから音が出た。やっと来た!
 さらにChrome Devを起動。自分で作ったWeb MIDI Appを試す。ちゃんとmi.1のポートが認識される。音もなった。ゴール!
 長かった。
 いまのところ、Chrome Devでない正式なChromeではまだ認識されてない。flagsで指定すればいけそうだけど、そのへんはあとで。どうせもうすぐバージョン上がるみたいだし(最初のリンク参照。今のは61.0,3163,98だった)。
 これで、ウチのAndroid端末でもAndroidのnative MIDI APIが試せる。かなりうれしい。ほかの端末、ROMで行けるかどうかはまったくわからないけど。

コメント