概要
Max8やその他のアプリケーションでもよく使う「OSC」と「UDP」について。大まかなIPの構造やMacベースでのセットアップ方法。
ちょっと長めになります
UDP,OSCとはなんぞや
UDPはUser Datagram Protocol、OSCはOpen Sound Controlの略です。
UDPは複数デバイスやアプリケーション間でデータを送受信するためのプロトコルであり、OSCは色々な用途がありますが、「MIDIを代替するために生み出された、新たなデータ形式」と覚えておいてください。
UDPを使うための基礎知識
MaxやopenFrameworksにおいて、OSCやUDPは送り先の「IPアドレス」「ポート」を指定して運用します。
「IPアドレス」とは、「ネットワーク上の住所」のようなものです。そしてこのIPアドレスはコンピュータ固有のものが割り当てられます。同じ住所に一軒家が二つなんて基本はないですよね。
なので、IPアドレスは別々なのです。
実践編
(丁寧語がめんどくさくなったのでこの後は適当)
想定環境は作品のための環境作りであり、他のネットワークが一切絡まないものとする。ここでは最低限の通信環境である二台のコンピュータおよびハブの構成として仮定する。(一応Wi-Fi利用の場合も併記する。)
なお、このセットアップをした場合既存のネットワークに繋がらなくなる可能性大なので、新しくプロファイル(ネットワーク環境)を作ることを推奨。
コンピュータのIPアドレスを設定する
「システム環境設定>ネットワーク」と選択して、Wi-FiならWi-Fi、有線接続ならその有線の機器を選択します。
- Wi-Fiの場合
「詳細」を押し、タブから「TCP/IP」を選択。「IPv4の設定」から「手入力」を選択する。IPアドレスに[192.168.0.###]サブネットマスクに[255.255.255.0]ルーターに[192.168.0.1]を設定。 - 有線の場合
Wi-Fiとは違い既に[IPv4の設定]が表示されているため、そこを「手入力」で選択。IPアドレスに[192.168.0.###]サブネットマスクに[255.255.255.0]ルーターに[192.168.0.1]を設定。
"###"の部分は機器に応じて2~224の数字を割り振る。0,1,255は割り振らない、既存の別機器と被らない値を選ぶこと。
Max8 送信側 (IPアドレス192.168.0.2)
新しくオブジェクトを作り、中に"udpsend 192.168.0.3 25565"と入力する。udpsendの二つのアーギュメントはそれぞれ送り先のIPアドレスとポート番号の指定のために使う。ポートに関してはシステム予約のないところを選ぶこと。二万ぐらいまでいけば大体大丈夫なはず。OS占有のポートはAppleから公開されているので、こちらを参照。送りたいメッセージをパッチコードで繋いで送信する。今回はOSCを使うため、"/position/x 356""/position/y 524""/rotation 19 95 331"の三つのメッセージを例として用意。
Max8 受信側(IPアドレス192.168.0.3)
新しくオブジェクトを作り、中に"udpreceive 25565"と入力する。センドと違い、指定するのはポート番号のみ。OSCを色々いじくるためパッケージマネージャーからCNMATをインストールしておく。
udpreceiveから繋がる新たなオブジェクトを作り、"OSC-route /position /rotation"と入力する。確認用にprintオブジェクトを二つ配置し、繋げばOK。
UDP
IPアドレスとポートを指定してデータ(主にテキスト)をやりとりするもの。IPアドレスは住所、ポートは大量にあるポストのようなモノだと覚えれば良い。送信元は住所とポストを指定、受信者はポストを指定してそこに入っているモノを取りに行く。
OSC
Open Sound Controlはある一行のテキストの中に[アドレス]と[データの値]を入れて利用するモノ。データの値はリスト化が可能である。以下に一例を示す。
/position/x 356
/rotation 19 95 331
先ほども例として利用したこの二つだが、前半の英数字部分がアドレス、後ろが数値(アーギュメント)である。
そしてこのアドレスだが通常のMacオブジェクトである"route"でも分離が可能だが、いかんせんアドレスがフルパスでないとルーティングができず、よってOSCの利点たる階層構造アドレスも利用できないので"OSC-route"を使うのである。アドレスを全てルーティングすると、後に残るのはリスト構造のデータである。よってそこはunjoin、unpack等を利用してリストを分離して利用する。