OSCについて調べること半日以上、やっと通信できました。かなり色んなところでハマったけど、実はそんなに難しいことではなかったみたい。


■Processingと、Max/MSPをOSC経由で連携させる方法

oscP5(Processingのライブラリ)をダウンロードして、インストール


・ProcessingのExamplesから、oscP5sendReceiveを開く
・17行目あたりの、oscP5 = new OscP5(this,12000);
 となっているところの、12000を12001など、12000以外に変更する。
 (これは受信用のポート番号)
・26行目あたりの
 myRemoteLocation = new NetAddress("127.0.0.1",12000);
 の方はそのままで。
 (これは送信用のポート番号)


・Max/MSPのパッチを、以下の画像のように組む。
 udpsendと、udpreceiveで、送るときのポートを12001、受信は12000にする。
 (12001、12000は、Processing側とそろっていれば良い)
 ※udpsend、udpreceiveは、Max/MSP4.6以降でしか使えないので
  それ以前のものを使っている人は、前のエントリを参考にしてください。

oscP5


どうも、Processing側の受信用ポート番号と、送信用ポート番号を同じにしてしまうと、Processing内部で信号が伝達してしまって、Max/MSP側にそれが伝わらないようようです。なので、Processingと、Max/MSPで通信したいときは、

・Processing側の受信用ポート番号 = Max/MSP側の送信用ポート番号
・Processing側の送信用ポート番号 = Max/MSP側の受信用ポート番号
且つ
・Processing側の受信用ポート番号 ≠ Processing側の送信用ポート番号

と設定する必要があるみたいです。


それから、Processing側でOSCを受け取るときは、oscEventというメソッドで信号を受け取れるようです。これはFlashで言うところのイベントハンドラみたいな感じですね。


OSCと、MaxLinkのどっちを使うかというのが難しいところ。MaxLinkの方がプログラムはシンプルにできそうな気はするけど、OSCはOSCで細かいことがいろいろできそうだなぁ。あと、なんとなくだけど、OSCの方が安定しているような気もする。MaxLinkはバグっぽいのもあったし。