自分で、UDP / TCPをつかい、MIDIを送受信するプロトコルを考えてみました。
まったく考えないと、RTP-MidiやUMP(MIDI2.0)のことを理解できないですからね。
実装するかどうかは、予定は未定の段階です。(ポート番号も仮りです)
モジュール一覧
・MidiOneNetサーバー
・MidiOneNetクライアント
・MidiOneNetクライアントスキャナー(サーバーから)
MidiOneNetサーバー
・TCPIPリスナーを起動する
・クライアントスキャナーをもつ
ボタン押下により、スキャナーはUDPポート:50000より “MidiOneNet1:ポート番号”をブロードキャスト
クライアントから、”MidiOneNet4”を受け取った場合も、これを行う。
・接続可能一覧にクライアントを追加する(IP)
・ユーザーが接続を選択した場合、クライアントに接続要求するように、
UDPポート:50000より、”MidiOneNet3:ポート番号”をクライアントのIPだけに?ブロードキャストする。
MidiOneNetクライアント
・TCPIPクライアントとする
・クライアントとして、つながるまでの間、存在証明を送る(下方法)
スキャナーから、”MidiOneNet1:ポート番号”をうけとったら、”MidiOneNet2″を送り返す
逆にいきなり、”MidiOneNet4″をおくり、サーバーに、”MidiOneNet1:ポート番号”をリクエストできる
・接続可能一覧に、サーバーを表示する(IP,Port)
・接続要求するようにうながされた場合および、ユーザーがIP,Port指定したさいに、サーバーと接続する
接続後データのやりとりをする
データは「コード、長さ、データ配列」の順番で、複数連結して送信することもある。
プロトコル
コード0, 0=サーバーアクティブ信号(毎秒1回)
コード1, 0=クライアントアクティブ信号(毎秒1回)
コード2, n, データ配列=MIDIデータ
コード3, n, jsonデータ(utf-8)=プロファイル送信
コード4, 0=プロファイル要求
コード5, n, jsonデータ(utf-8)=なんかしらのテキスト送信
コード9, 0=ターミネート
プロファイルjsonの構造:未定
profile { name=”MidiOneNet1″, acceptconnectsignal=true, autoreconnect=true }
みたいなもの