MIDI通信を使えるようにするライブラリを作っていました。Specification(PDF)を公開していたのを先日見つけたので、その仕様に合うよう実装してみました。MIDIなデバイスとが接続でき、演奏やイベントの記録などをすることができます。MIDIなアプリとも接続できます。MIDIデバイスとして振る舞わせることができます。注意:このAppleの仕様は、まだMIDI公式から承認されていません。以前問い合わせをしたところ、「ドラフトの仕様はあるが絶賛議論中だよ。議論を見たかったら会員になってね♡」とのことでした。公式としてリリースされる仕様ではAppleのものとの食い違いが出てくるかもしれません。CentralとPeripheralの機能を使えるようになります。MIDIデバイスを探して、接続します。アプリはデバイスとMIDIメッセージを送受信できます。18)以降が必要です。19)以降が必要です。MIDIデバイスとして振舞います。X)のCentralなアプリから接続して使用されます。21)以降が必要です。Peripheralに対応している必要があります。SM-G900F/Vが対応機種のようです。Peripheralに対応しているかどうかは、↓のサンプルアプリでも確認できます。PeripheralのActivityが起動すればOKで、起動させたときに「利用できません」的なダイアログが出たら使えません。Playで公開しています。このアプリはノートON/OFFのMIDIイベントを送信できます。受信した全てのMIDIイベントをListViewに表示します。6とでテストしています。Peripheral機能をサポートしていません。BLEの接続どうも不安定です。高頻度で切断→再接続が起きて、接続された状態を維持することができません。ライブラリのバグかもしれないので調査中です。CentralとPeripheralの機能のどちらもサポートしています。BLEの接続はとても安定しています。コードを参照するソースコードはgithubのリポジトリで公開しています。このリポジトリはライブラリとサンプルプロジェクトを含んでいます。masterブランチは最新のリリースバージョン、develop(もしくはfeature)ブランチは最新の開発バージョンです。現在このライブラリは活発に開発中なので、まだまだ問題があるかと思います。バグや改善点を見つけたり要望などありましたらgithubのissueか、emailでご連絡ください。ライブラリを使うアプリを実装する場合の手順です。Studioの利用が前提です。設定にURLを追加します。設定に依存性情報を追加します。いう2種類のクラスがあります。Providerのフィールドを追加します。MIDIデバイスを検索します。引数timeoutの単位はミリ秒です。0かマイナス値だと、止めるまでずっとデバイスを検索します。MIDIデバイスが存在することを通知します。メソッドを呼ぶ必要があります。いうメソッドがあります。クラスのインスタンスをnewしたものを、このメソッドを使ってProviderへと関連付けます。呼ばれて通知されます。インスタンスを関連付けることができます。メソッドが呼ばれて通知されます。メソッドが呼ばれます。bleMidiCentralProvider.disconnectDevice(midiOutputDevice);MIDIイベントの送信Providerは接続されている全てのデバイス情報を保持しています。メソッドのような、MIDI送信のためのメソッドを持っています。メソッドのような、全てのMIDI受信イベントに対応したメソッドが定義されています。インスタンスを持つだけで良いです。アプリがMIDIイベントを受信すると、対応するメソッドが呼ばれます。注意:全てのイベントリスナーのメソッドはUIスレッドの外から呼ばれます。経由する必要があります。