Team:NYU Shanghai/Code

Code

//main
import processing.video.*;
import arb.soundcipher.*;
import blobDetection.*;

Capture video_sequencer, video_rack;
SoundCipher sc = new SoundCipher(this);

int grid_size=20;
int grid_num=16;
int window_size;
int window_height;
int block_number=3;

int interval=4;
int margin;
int n=0;//iterator for play()

boolean[] camera= new boolean[block_number];
boolean[] music=new boolean[block_number];
boolean tube=false;
int[] volume=new int[block_number];

Sequencer[] sequencer= new Sequencer[block_number];
Sequencer_video sequencer_video;
Rack rack;

void setup() {
volume[0]=0;
volume[1]=0;
volume[2]=0;
window_size=displayWidth;
window_height=displayHeight;

margin=(window_size-(grid_num*(grid_size+interval)+interval)
*block_number)/(block_number+1);
size(window_size, window_height);

//empty tracks
for (int i=0; icamera[i]=false;
music[i]=false; }

make_empty();

String[] cameras = Capture.list();

video_sequencer = new Capture(this, cameras[0]);
video_sequencer.start();
sequencer_video=new Sequencer_video(video_sequencer, sc, grid_num, grid_size, interval);

video_rack = new Capture(this, cameras[15]);
video_rack.start();
rack=new Rack(video_rack, sc, window_size, window_height,
window_height-margin-grid_num*(grid_size+interval));

frameRate(4);
}

void draw() {
background(0);
if (tube) {
rack.get_color();
rack.draw_rack();
rack.glow(n);
rack.play_sounds(n); }

for (int i=0; isequencer[i].draw_grid();
if (camera[i]&&!music[i]) {
sequencer_video.position(pos_x(i), margin);
sequencer_video.grid_off();
sequencer_video.bd();
sequencer_video.bd_draw(n);
} else if (camera[i]&&music[i]) {
sequencer_video.position(pos_x(i), margin);
sequencer_video.grid_on();
sequencer_video.bd();
sequencer_video.bd_draw(n);
} else if (!camera[i]&&music[i]) {
sequencer[i].set_volume(volume[i]);
sequencer[i].play_sounds(n);
sequencer[i].glow(n);
}
} n++; if (n>=grid_num) { n=0; } } void keyPressed() { //track 1 if (key=='q'||key=='Q') { if (camera[0]==false &&camera[1]==false &&camera[2]==false) { camera[0]=true; } } else if (key=='w'||key=='W') { camera[0]=false; if (music[0]) { sequencer[0].get_sequence(sequencer_video.sequence()); sequencer[0].get_color(sequencer_video.grid_color()); } } else if (key=='e'||key=='E') { music[0]=true; } else if (key=='r'||key=='R') { music[0]=false; sequencer[0].delete(); } else if (key=='t'||key=='T') { if (music[0]) { if (camera[0]) { sequencer_video.set_volume(volume[0]); } else { sequencer[0].set_volume(volume[0]); } } } else if (key=='y'||key=='Y') { if (music[0]) { volume[0]=constrain(volume[0]+5, 0, 127); if (camera[0]) { sequencer_video.set_volume(volume[0]); } else { sequencer[0].set_volume(volume[0]); } } } //track 2 else if (key=='a'||key=='A') { if (camera[0]==false &&camera[1]==false &&camera[2]==false) { camera[1]=true; } } else if (key=='s'||key=='S') { camera[1]=false; if (music[1]) { sequencer[1].get_sequence(sequencer_video.sequence()); sequencer[1].get_color(sequencer_video.grid_color()); } } else if (key=='d'||key=='D') { music[1]=true; } else if (key=='f'||key=='F') { music[1]=false; sequencer[1].delete(); } else if (key=='g'||key=='G') { if (music[1]) { volume[1]=constrain(volume[1]-5, 0, 127); if (camera[1]) { sequencer_video.set_volume(volume[1]); } else { sequencer[1].set_volume(volume[1]); } } } else if (key=='h'||key=='H') { if (music[1]) { volume[1]=constrain(volume[1]+5, 0, 127); if (camera[1]) { sequencer_video.set_volume(volume[1]); } else { sequencer[1].set_volume(volume[1]); } } } //track 3 else if (key=='z'||key=='Z') { if (camera[0]==false &&camera[1]==false &&camera[2]==false) { camera[2]=true; } } else if (key=='x'||key=='X') { camera[2]=false; if (music[2]) { sequencer[2].get_sequence(sequencer_video.sequence()); sequencer[2].get_color(sequencer_video.grid_color()); } } else if (key=='c'||key=='C') { music[2]=true; } else if (key=='v'||key=='V') { music[2]=false; sequencer[2].delete(); } else if (key=='b'||key=='B') { if (music[2]) { volume[2]=constrain(volume[2]-5, 0, 127); if (camera[2]) { sequencer_video.set_volume(volume[2]); } else { sequencer[2].set_volume(volume[2]); } } } else if (key=='n'||key=='N') { if (music[2]) { volume[2]=constrain(volume[2]+5, 0, 127); if (camera[2]) { sequencer_video.set_volume(volume[2]); } else { sequencer[2].set_volume(volume[2]); } } } else if (key=='o'||key=='O') { tube=true; } else if (key=='p'||key=='P') { tube=false; } else if (key==CODED) { if (keyCode==LEFT) { sequencer_video.threshold_down(); } else if (keyCode==RIGHT) { sequencer_video.threshold_up(); } else if (keyCode==UP) { rack.volume_up(); } else if (keyCode==DOWN) { rack.volume_down(); } } } void make_empty() { for (int i=0; i=0&&n+p=0&& m+q5&&b.w*block_size<25&& b.h*block_size>5&&b.h*block_size<25) { strokeWeight(3); stroke(255, 0, 0); rect( b.xMin*block_size, b.yMin*block_size, b.w*block_size, b.h*block_size ); } } } popMatrix(); } void fastblur(PImage img, int radius) { if (radius<1) { return; } int w=img.width; int h=img.height; int wm=w-1; int hm=h-1; int wh=w*h; int div=radius+radius+1; int r[]=new int[wh]; int g[]=new int[wh]; int b[]=new int[wh]; int rsum, gsum, bsum, x, y, i, p, p1, p2, yp, yi, yw; int vmin[] = new int[max(w, h)]; int vmax[] = new int[max(w, h)]; int[] pix=img.pixels; int dv[]=new int[256*div]; for (i=0; i<256*div; i++) { dv[i]=(i/div); } yw=yi=0; for (y=0; y>16; gsum+=(p & 0x00ff00)>>8; bsum+= p & 0x0000ff; } for (x=0; x>16; gsum+=((p1 & 0x00ff00)-(p2 & 0x00ff00))>>8; bsum+= (p1 & 0x0000ff)-(p2 & 0x0000ff); yi++; } yw+=w; } for (x=0; x5&&b.w*block_size<25&& b.h*block_size>5&&b.h*block_size<25){ blobs[n][0]=b.xMin*block_size; blobs[n][1]=b.yMin*block_size; blobs[n][2]=b.w*block_size; blobs[n][3]=b.h*block_size; } } } void convert() { int row, col, i; for (int n=0; n0&&i=0&&n+p=0&& m+q
Source: blob detection http://www.v3ga.net/processing/BlobDetection/

soundcipher http://explodingart.com/soundcipher/ Source: blob detection http://www.v3ga.net/processing/BlobDetection/ soundcipher http://explodingart.com/soundcipher/