ということで、ProcessingとMax/MSPで通信するときに、oscP5とMaxLink、どっちがいいのか、どう違うのかを調べてみました。MaxLinkもウェブをちゃんと読むと、UDPによる通信であるとわかりました。

以下、比べやすいように、同じ内容のものを2通りの方法で書いています。どちらとも、3本のマイクで、RGBの色をコントロールするというシンプルなものです。


■oscP5

oscP5

oscP5の場合、Maxから受信したデータを解析しないといけないのと、Max側からデータを送るときも、[ prepend /R ]みたいに、何のデータかをラベリングしないといけないのでそれがちょっと面倒でした。その代わり、通信するときの変数の数が増えたりしたときには、こっちの方が安全そうです。あと、このプログラムでは端折っていますが、ProcessingのプログラムのoscEventメソッドの中では、変数の型のチェックもしたほうが良いでしょう。


■MaxLink

MaxLink

こっちは、かなりプログラムは単純になります。まず、Max側ですが[mxj jk.link]をおいて、インレットとアウトレットの数を指定するだけです。今回の場合、Processing側からMaxにデータを送ることはないので、アウトレットは0。

Processing側も至って簡単、setup()メソッドの中で、link.declareInlet( "Processingの中のプロパティ名" );とするだけ。このとき、link.declareInletの処理の順番が大事で、Processing側の処理の順番と、Max側のインレットの順番をあわせないといけません。


■どう使い分けるか

以上の結果を踏まえると、やりとしたい変数の数次第かなと思いました。変数の数が少なければMaxLinkの方が、プログラミングが楽です。ただ、変数の数が5個とか6個とか増えてくると、MaxLinkの場合、インレットの順番と、declareInretの順番をあわせるのが大変そうです。なので、そういう場合は、oscP5でちゃんと解析したほうが良いかと。

それから、oscP5は、oscEventというFlashでいうところのイベントハンドラ的なメソッドを使って、Maxからの情報を取得するので、どこで通信しているのかが明確でわかりやすいような気もします。

あとは、MaxLinkはMax専用なので、Max以外のものとも連携する場合なんかは、oscP5に統一したほうが良いかなぁと思ったりもしました。

以上。

今回の比較にMIDIは入っていませんが、UDPが面白そうだったのでUDPだけにしました。