Τετάρτη 17 Φεβρουαρίου 2010

Harmonic Sequence

Κάναμε ορισμένες αλλαγές στον κώδικα με σκοπό να δημιουργήσουμε νότες και να μπορέσουμε να ελέγξουμε καλύτερα το τελικό αποτέλεσμα. Ο κώδικας είναι:

import processing.opengl.*;
import processing.video.*;
import s373.flob.*;
import ddf.minim.*;
import ddf.minim.signals.*;

Minim minim;
AudioOutput out;
SineWave sine200;
SineWave sine400;
SineWave sine50;
SineWave sine1200;

Capture video;
Flob flob;
ArrayList blobs;

int tresh = 50;
int fade = 50;
int om = 1;
int videores=350;
boolean drawimg=true;
String info="";
PFont font;
int videotex = 3;
int colormode = flob.BLUE;
float fps = 90;

Monoflob mono;

void setup(){

try {
quicktime.QTSession.open();
}
catch (quicktime.QTException qte) {
qte.printStackTrace();
}

size(700,700,OPENGL);
frameRate(fps);
rectMode(CENTER);

video = new Capture(this, videores, videores, (int)fps);
flob = new Flob(this, video, width,height);

flob.setTresh(tresh);
flob.setImage(videotex);
flob.setBlur(0);
flob.setMirror(true,false);
flob.setOm(0);
flob.setOm(1);
flob.setFade(fade);
flob.setMinNumPixels(20);
flob.setMaxNumPixels(500);

flob.setColorMode(colormode);


font = createFont("monaco",9);
textFont(font);

mono = new Monoflob(0,0);

minim = new Minim(this);
out = minim.getLineOut();
sine200 = new SineWave(0, 0, out.sampleRate());
out.enableSignal(sine200);

}

float a0=0;
float b0=0;

void draw(){

if(video.available()) {
video.read();
blobs = flob.calc(flob.binarize(video));
}

if(drawimg)
image(flob.getImage(), 0, 0, width, height);

rectMode(CENTER);
int numblobs = blobs.size();
for(int i = 0; i < numblobs; i++) { ABlob ab = (ABlob)flob.getABlob(i); mono.touch(ab.cx,ab.cy, ab.dimx, ab.dimy); float a=ab.cx; float b=ab.cy; fill (255,0,0); ellipse (a,b,50,50); out.disableSignal(sine200); if (a!=a0 || b!=b0){ sine200 = new SineWave(a, b, out.sampleRate()); out.addSignal(sine200); if ( a > 0 && a < 600) { out.enableSignal(sine200); fill (random(0, 255), random(0, 255), random (0, 255)); rect (0,0,1920,1500); } else { out.disableSignal(sine200); a0=a; b0=b; } mono.render(); fill(255,152,255); rectMode(CORNER); rect(5,5,flob.getPresencef()*width,10); String stats = ""+frameRate+"\nflob.numblobs: "+numblobs+"\nflob.thresh:" +tresh+ " "+"\nflob.fade: "+fade+" "+"\nflob.om: "+flob.getOm()+
"\nflob.image: "+videotex+"\nflob.colormode: "+flob.getColorMode()+"\nflob.presence:"+flob.getPresencef();
fill(0,255,0);
text(stats,5,25);

}


void keyPressed(){
if(key=='b')
drawimg^=true;
if (key=='S')
video.settings();
if (key=='s')
saveFrame("monoflob-######.png");
if (key=='i'){
videotex = (videotex+1)%4;
flob.setImage(videotex);
}
if(key=='t'){
tresh--;
flob.setTresh(tresh);
}
if(key=='T'){
tresh++;
flob.setTresh(tresh);
}
if(key=='f'){
fade--;
flob.setFade(fade);
}
if(key=='F'){
fade++;
flob.setFade(fade);
}
if(key=='o'){
om^=1;
flob.setOm(om);
}
if(key=='c'){
colormode=(colormode+1)%5;
flob.setColorMode(colormode);
}
if(key==' ')
flob.setBackground(video);
}

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου