OSCMessageに複数のデータを含めた場合

OSCMessageに複数のデータを入れた場合、読み取るMax/MSPのパッチに工夫が必要です。



import oscP5.*;
import netP5.*;

OscP5 oscP5;
NetAddress myRemoteLocation;

void setup() {
  size(400,400);
  oscP5 = new OscP5(this,6230);//ポート番号は受信側で設定したものを同じにする
  myRemoteLocation = new NetAddress("127.0.0.1",6230);
}


void draw() {
  background(0);  
}

void mousePressed() {
  OscMessage myMessage = new OscMessage("/boo");// /booはアドレス
  
  myMessage.add(123);//ひとつめのデータ
  myMessage.add(456);//ふたつめのデータ

  oscP5.send(myMessage, myRemoteLocation); //送信
}
 
 
あらかじめ送られてくるデータの数がわかっている必要がありますが、
unjoinを使えば簡単にデータを切り分けられます。 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
OSCMessageに含めることのできるデータは、int,float,char,byte,string です。
配列も含めることができます。ただし、byte型の配列は、oscP5ライブラリが
OSC-blob型にしてしまいますので、これをMax/MSPで読み取るのはちょっと
面倒なので、使わないほうが無難です。
 
 

 

ProcessingからOSCでMax/MSPにデータを送る


受信するためのシンプルなパッチは以下のとおりです。












このパッチではUDPをつかって通信しています。センサーのデータを連続して送り続けるといったリアルタイム性が重要なアプリケーションの場合は送りっぱなしのUDPのほうが向いていると思います。逆に送ったデータがちゃんと届いたかどうか確認が必要な場合はTCPのほうが良いかもしれません。


また、受信するデータが整数ではなくて実数の場合は、numberの代わりに flonumを使いましょう



送信するためのシンプルなスケッチは以下のとおりです。
import oscP5.*;
import netP5.*;

OscP5 oscP5;
NetAddress myRemoteLocation;

void setup() {
  size(400,400);
  oscP5 = new OscP5(this,6230);//ポート番号は受信側で設定したものを同じにする
  myRemoteLocation = new NetAddress("127.0.0.1",6230);
}


void draw() {
  background(0);  
}

void mousePressed() {
  OscMessage myMessage = new OscMessage("/boo");// /booはアドレス
  
  myMessage.add(123);
  oscP5.send(myMessage, myRemoteLocation); //送信
}

マウスをクリックしたらメッセージが送られます。

127.0.0.1はlocalhost(自分自身)を示すIPです。同じネットワークの別のコンピュータのIPを指定することもできます。






また、同時に複数の種類のデータを送りたいことがあります。OSCではメッセージをひとまとめにして送ることができます。これをバンドルといいます。

bundleを使う送信のシンプルなスケッチは以下のとおりです。

import oscP5.*;
import netP5.*;

OscP5 oscP5;
NetAddress myRemoteLocation;

void setup() {
  size(400,400);
  oscP5 = new OscP5(this,6230);
  myRemoteLocation = new NetAddress("127.0.0.1",6230);
}


void draw() {
  background(0);  
}


void mousePressed() {
  OscBundle myBundle = new OscBundle();//バンドルを作成

  OscMessage myMessage = new OscMessage("/boo");// /booに送るメッセージを作成
  myMessage.add(15);
  
  myBundle.add(myMessage);//バンドルにメッセージを追加
  
  myMessage.clear();//先ほどのメッセージをクリア
  
  myMessage.setAddrPattern("/bar");//新たに/barに送るメッセージを作成
  myMessage.add(301);
  myBundle.add(myMessage);//バンドルにメッセージを追加
  
  oscP5.send(myBundle, myRemoteLocation);//送信
}

受信するためのシンプルなパッチは以下のとおりです。












ProcessingでOSCを使う準備


ProcessingのoscP5ライブラリを利用します。

http://www.sojamo.de/libraries/oscP5/
からライブラリをダウンロードします。









ダウンロードしたライブラリをProcessingフォルダのlibrariesフォルダにコピーしましょう。

これでOSCが使えるようになりました。

Max/MSPでOSCを使う準備

http://cnmat.berkeley.edu/patch/4059
からOpenSoundControlのパッケージをダウンロードします。
全部入りなのでサイズはでかいです。










ダウンロードしたパッケージの中のOpenSoundControl.mxeとOSC-route.mxeをextensionsフォルダにコピーします。

これで、OSCが使えるようになりました。