脳波を取得する

Vie StreamerからOSCで送出される脳波(Delta, Theta, Alpha, Beta, Gamma)を取得して可視化

サンプルコード:

  • 実行手順

    • Vieを装着し、Vie StreamでVieに接続

    • 「計測開始(Activate Sensor)」ボタンを押す

    • 「OSC転送(OSC Streaming)」ボタンを押す

    • 「ポート番号」と「デバイス識別子」を確認。(通常はそれぞれ、65001、1)

    • コードの実行

  • トラブルシュート

    • oscP5ライブラリがインストールされていない

      • [スケッチ] > [ライブラリインポート] > [Manage Libraries]

      • 開いたウインドウで 「oscP5」を検索してinstall

    • Processingのバージョンが低い

      • 最新版(4以上)を入れる

Vie Streamerの仕様について

  • アドレス (left):/wave/L/<devid>

    アドレス (right):/wave/R/<devid>

  • フォーマット:5つの小数値が、全体の周波数に対するデルタ/シータ/アルファ/ベータ/ガンマの比較貢献度をを示す。理論的な極限値は、0%から100%。

  • 例:デルタの値が38%であれば、スペクトラム内の全ての周波数のなかで、38%の周波数エネルギーが、デルタ帯域(0.5Hz to 4Hz)の中にあることを示している。

詳しくはちらを参照

サンプルコードの解説

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

}

Last updated