Second TAD project (with video). [2013.12.09: the TAD website has been offline for a while now]
Here is the source code:
/**
* EPOC Recorder 1
* by Joshua Madara, hyperRitual.com
* This sketch records graphical data from the Emotiv
* EPOC via OSC messages, as a .mov video file.
*/
import oscP5.*;
import processing.video.*;
// declare objects
OscP5 oscP5;
MovieMaker mm;
Format formatter;
PFont miniMono;
Date time;
int barColor = (color(255,0,0));
void setup() {
size(320, 240);
background(0);
rectMode(CORNERS);
// listen for OSC messages on port 7400
oscP5 = new OscP5(this, 7400);
// plug the messages from COG/PUSH to function makeFrame()
oscP5.plug(this,"makeFrame","/COG/PUSH");
// load MiniMono font
miniMono = loadFont("MiniMono.vlw");
textFont(miniMono);
// format timestamp
formatter = new SimpleDateFormat("HH:mm:ss:SSS");
// Create MovieMaker object with size, filename,
// framerate, compression codec and quality
mm = new MovieMaker(this, width, height, "epoc_record.mov",
30, MovieMaker.H263, MovieMaker.LOSSLESS);
}
void draw() {
// not used
}
// for each new event, add a frame to the video
void makeFrame(float pushValue) {
background(0); // clear screen
// update and draw timestamp and COG/PUSH value
/* note that the time here is the local time when the
event is recorded, not a count-up timer that initiates
when recording begins, although that could be implemented */
time = new Date();
String timestamp = formatter.format(time);
fill(255);
text("Time: "+timestamp+" Value: "+pushValue, 5, 10);
// draw horizontal lines
for (int i = 0; i <= 10; i++) {
stroke(map(i, 0, 10, 255, 0));
float yPos = map(i, 0, 10, 20, 220);
line(100, yPos, 220, yPos);
}
// draw bar
float barHeight = map(pushValue, 0, 1, 220, 20);
noStroke();
fill(barColor, 100);
rect(width/2 - 20, 220, width/2 + 20, barHeight);
// write pixels to video frame
mm.addFrame();
}
// press space bar to finish the video
void keyPressed() {
if (key == ' ') {
mm.finish();
}
}


