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が使えるようになりました。

自作Arduino atmega168の設定

Fuse
  ext 0xF8
  high 0xDD
  low 0xE2

Lock
  0xCF

ArduinoISPだとうまく設定されない。というかboards.txtの値が変。要確認

Arduinoの準備

ArduinoはFTDIのドライバ使ってコンピュータと接続する。
ProやProMiniのようにシリアル接続の付いていないものは、別途シリアル接続が必要になるので注意。

FTDI Drivers

自分の利用する環境の、Virtual Com Port(VCP)ドライバをダウンロード、インストールする。



インストールは下記を参考に。

Installation Guides

初めにそろえろ!

いっぱい持ってても困らないもの
いずれ必要になる。ついでに買っとけ。


抵抗器
炭素皮膜抵抗
カーボン抵抗


100本 \100-

1/4W(大きい方)、1/6W(小さい方)がある
1/6Wは小さすぎて使いにくいかも

100
1K
10K
100K
330
2.2K

ぐらいあれば大丈夫な気がする
多少の違いは気にするな


コンデンサー
積層セラミックコンデンサー
10本 \100-ぐらい

足ピッチは自分で治せるからそんなに気にしない
耐圧は16V以上あればなんとなく大丈夫

104
105
106

ぐらいあれば大丈夫な気がする


LED
みんな大好き
10本 \100-ぐらいから

好きな色や大きさを買おう
レッツピカピカ