ちょっと使う機会が出来たらそのうち触っておこうと思っていたOSC周りのライブラリをいろいろ漁ってみていた。
今回、正確にはTUIOを使う要件だったが、良い機会だったので下レイヤーで動いてるOSCを理解しておこうと思った。
OSC/TUIO
OpenSound Control (OSC)
https://ja.wikipedia.org/wiki/OpenSound_Control
OSCはUDP通信上のフォーマット仕様。TUIOはさらにOSCを利用してタッチ入力用に取り決められた標準仕様という理解。
UDPを使ったソケット通信自体は過去何度も経験があったけど、
バイナリデータでやり取りしてたり、パースを毎回自前でやってたりして大分不毛だった。
同じバイナリパース処理を3つの違う言語バージョンで書いたことある。
メリットとか特徴とか
- 言語ごとにライブラリが存在するので通信処理とデータ解析処理を自前でやらなくて良い
- 値にアクセスするためのURIっぽい構造化されたOSCアドレスが素敵
OSCライブラリ
OSCのライブラリをいろいろ調べていてどれもいまいち使いにくい印象だった。
どのライブラリも受信データの分解まではやってくれるけど、受信データにもっと直ぐに、もっと簡単に、アクセスしたかった。あと汎用的に。
その中でこれが良い気がした。OSCアドレス指定で受信毎のコールバックが設定できる。
Rug.Osc
Simple, complete, open source OSC implementation for .NET and Mono.
https://bitbucket.org/rugcode/rug.osc/overview
その上で、もうすこしUnityフレンドリーな感じで受信側のラッパークラス書いた。
Unity-OscReceiveController
https://github.com/sharkattack51/Unity-OscReceiveController
受信の値をインスペクタで確認できるようにpublic変数でやってる。
ソースファイルを増やしたくないのでインスペクタ拡張のEditorスクリプトはわりかし作らない主義です。