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);//送信
}

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












0 件のコメント:

コメントを投稿