//OSC関連のライブラリーをインポート
import oscP5.*;
import netP5.*;
//OSCP5クラスのインスタンス
OscP5 oscP5;
//左の脳波用配列
float [] waveLeft = new float[5];
//右の脳波用配列
float [] waveRight = new float[5];
//各配列のindex0~4にDelta,Theta,Alpha,Beta,Gamma波の数値が入る
//waveLeft[0]:DeltaLeft waveRight[0]:DeltaRight
//waveLeft[1]:ThetaLeft waveRight[1]:ThetaRight
//waveLeft[2]:AlphaLeft waveRight[2]:AlphaRight
//waveLeft[3]:BetaLeft waveRight[3]:BetaRight
//waveLeft[4]:GammaLeft waveRight[4]:GammaRight
//表示のための設定
String [] colorHex = {"FF034AA6", "FF72B6F2", "FF73BFB1", "FFF2A30F", "FFF26F63"};
String [] bandName = {"Delta", "Theta", "Alpha", "Beta", "Gamma"};
void setup() {
size(800,600);
frameRate(60);
//ポートを65001に設定して新規にOSCP5のインスタンスを生成
oscP5 = new OscP5(this,65001);
}
void draw() {
background(0);
noStroke();
//waveLeftの描画
for(int i=0;i<5;i++){
fill(unhex(colorHex[i]));
rect(130, 50+30*i, waveLeft[i], 20);
fill(255);
text(bandName[i], 30, 65+30*i);
text(floor(waveLeft[i])+"%", waveLeft[i]+140, 65+30*i );
}
//waveRightの描画
for(int i=0;i<5;i++){
fill(unhex(colorHex[i]));
rect(400, 50+30*i, waveRight[i], 20);
fill(255);
text(bandName[i], 300, 65+30*i);
text(floor(waveRight[i])+"%", waveRight[i]+410, 65+30*i );
}
//ラベル
text("Left", 30, 30);
text("Right", 300, 30);
}
//OSCメッセージを受信した際に実行するイベント
//msg.get()の引数を0〜4に変えることで、
//送出されてくる各脳波(Delta, Theta, Alpha, Beta, Gamma)の値が取得できる。
//取得した数値を左右それぞれの配列に代入する
void oscEvent(OscMessage msg) {
if(msg.checkAddrPattern("/wave/L/1")==true) {
for(int i=0;i<5;i++){
waveLeft[i] = msg.get(i).floatValue();
}
}
if(msg.checkAddrPattern("/wave/R/1")==true) {
for(int i=0;i<5;i++){
waveRight[i] = msg.get(i).floatValue();
}
}
}