ProcessingでOSCを使おう!
OSCとは、コンピュータ音楽のための通信プロトコルです。
OpenSound Control - Wikipedia
利点としては、双方向通信ができる。パターンマッチングができる。
帯域幅の制限がなく、多くのソフトウェアに実装されている事にあると思う。
通信機能には7階層の構造があります。
【階層】
第七層:物理層、電気信号の変換
第六層:データリンク層 通信機器間の直接的な信号の受け渡し
第五層:ネットワーク層 ネットワークにおいて通信経路の選択
第四層:トランスポート層 ネットワークにおける通信管理
第三層:セッション層 通信プログラム間の通信の開始から終了までの手順
第二層:プレゼンテーション層 データの表現方法
第一層:アプリケーション層 ユーザーが操作するインターフェイス
OSCは、7から5層に入ります。
【IPとポート番号について】
IPとは、インターネットやイントラネットなどのIPネットワークに接続されたコンピュータ1台1台に割り振られた識別番号(127.0.0.1自身のアドレス)
ポート番号とは
複数の相手と同時に接続を行うためにIPアドレスの下に設けられたサブアドレス
(0から65535)まで使用可能。
【OSCメッセージの仕組み】
URIと同様に/で区切ることで階層構造を表現しています。
/1/fader1 みたいな感じ。
processingだと、theOscMessage.checkAddrPatternで受け取れます。
では、メッセージを受け取って適当に処理されるプログラムを書いてみました。
import oscP5.*; import netP5.*; // VARIABLE ////////////////////////////////////////////// float xA = -100; float yA; float csXY = 40; OscP5 oscP5; NetAddress myBroadcastLocation; // SETUP ////////////////////////////////////////////// void setup() { size(320, 240); background(0); smooth(); //osc oscP5 = new OscP5(this,12000); //myBroadcastLocation = new NetAddress("127,0,0,1",32000); } // DRAW ////////////////////////////////////////////// void draw() { noStroke(); fill(0, 30); rect(0, 0, width, height); plus(); } // PRIVATE ////////////////////////////////////////////// void plus() { yA = sq(xA)/60; noStroke(); fill(255, 255, 255, 80); ellipse(xA+width/2,yA,csXY,csXY); xA++; //println(yA); if(xA > 200){ xA = -200; } } void oscEvent(OscMessage theOscMessage) { println("### received an osc message with addrpattern "+theOscMessage.addrPattern()+" and typetag "+theOscMessage.typetag()); theOscMessage.print(); if(theOscMessage.checkAddrPattern("/1/fader1") == true){ println("true"); float value = theOscMessage.get(0).floatValue(); println(value); csXY = 100*value; }else{ println("false"); } } ||> 今回は、送信側はiphoneで済ませています。 500円しますが適度でいいです。 [https://itunes.apple.com/jp/app/touchosc/id288120394?mt=8:embed]