Difference between revisions of "Team:NYU Shanghai/Code"

Line 134: Line 134:
  
 
   <br><br>frameRate(4);
 
   <br><br>frameRate(4);
<br>}
+
}
  
 
<br><br>void draw() {
 
<br><br>void draw() {
Line 164: Line 164:
 
   <br>}
 
   <br>}
  
   n++;
+
   <br><br>n++;
   if (n>=grid_num) {
+
   <br>if (n>=grid_num) {
     n=0;
+
     <br>n=0;
   }
+
   <br>}
}
+
<br>}
  
  
void keyPressed() {
+
<br><br>void keyPressed() {
   //track 1
+
   <br>//track 1
   if (key=='q'||key=='Q') {
+
   <br>if (key=='q'||key=='Q') {
     if (camera[0]==false &&camera[1]==false &&camera[2]==false) {
+
     <br>if (camera[0]==false &&camera[1]==false &&camera[2]==false) {
 
       camera[0]=true;
 
       camera[0]=true;
     }
+
     <br>}
   } else if (key=='w'||key=='W') {
+
   <br>} else if (key=='w'||key=='W') {
     camera[0]=false;
+
     <br>camera[0]=false;
     if (music[0]) {
+
     <br>if (music[0]) {
       sequencer[0].get_sequence(sequencer_video.sequence());
+
       <br>sequencer[0].get_sequence(sequencer_video.sequence());
       sequencer[0].get_color(sequencer_video.grid_color());
+
       <br>sequencer[0].get_color(sequencer_video.grid_color());
     }
+
     <br>}
   } else if (key=='e'||key=='E') {
+
   <br>} else if (key=='e'||key=='E') {
     music[0]=true;
+
     <br>music[0]=true;
   } else if (key=='r'||key=='R') {
+
   <br>} else if (key=='r'||key=='R') {
     music[0]=false;
+
     <br>music[0]=false;
     sequencer[0].delete();
+
     <br>sequencer[0].delete();
   } else if (key=='t'||key=='T') {
+
   <br>} else if (key=='t'||key=='T') {
     if (music[0]) {
+
     <br>if (music[0]) {
  
       if (camera[0]) {
+
       <br><br>if (camera[0]) {
         sequencer_video.set_volume(volume[0]);
+
         <br>sequencer_video.set_volume(volume[0]);
       } else {
+
       <br>} else {
         sequencer[0].set_volume(volume[0]);
+
         <br>sequencer[0].set_volume(volume[0]);
       }
+
       <br>}
     }
+
     <br>}
   } else if (key=='y'||key=='Y') {
+
   <br>} else if (key=='y'||key=='Y') {
     if (music[0]) {
+
     <br>if (music[0]) {
       volume[0]=constrain(volume[0]+5, 0, 127);
+
       <br>volume[0]=constrain(volume[0]+5, 0, 127);
       if (camera[0]) {
+
       <br>if (camera[0]) {
         sequencer_video.set_volume(volume[0]);
+
         <br>.set_volume(volume[0]);
       } else {
+
       <br>} else {
         sequencer[0].set_volume(volume[0]);
+
         <br>sequencer[0].set_volume(volume[0]);
       }
+
       <br>}
     }
+
     <br>}
   }
+
   <br>}
   //track 2
+
   <br>//track 2
   else if (key=='a'||key=='A') {
+
   <br>else if (key=='a'||key=='A') {
     if (camera[0]==false &&camera[1]==false &&camera[2]==false) {
+
     <br>if (camera[0]==false &&camera[1]==false &&camera[2]==false) {
 
       camera[1]=true;
 
       camera[1]=true;
     }
+
     <br>}
   } else if (key=='s'||key=='S') {
+
   <br>} else if (key=='s'||key=='S') {
     camera[1]=false;
+
     <br>camera[1]=false;
     if (music[1]) {
+
     <br>if (music[1]) {
       sequencer[1].get_sequence(sequencer_video.sequence());
+
       <br>sequencer[1].get_sequence(sequencer_video.sequence());
       sequencer[1].get_color(sequencer_video.grid_color());
+
       <br>sequencer[1].get_color(sequencer_video.grid_color());
     }
+
     <br>}
   } else if (key=='d'||key=='D') {
+
   <br>} else if (key=='d'||key=='D') {
     music[1]=true;
+
     <br>music[1]=true;
   } else if (key=='f'||key=='F') {
+
   <br>} else if (key=='f'||key=='F') {
     music[1]=false;
+
     <br>music[1]=false;
     sequencer[1].delete();
+
     <br>sequencer[1].delete();
   } else if (key=='g'||key=='G') {
+
   <br>} else if (key=='g'||key=='G') {
     if (music[1]) {
+
     <br>if (music[1]) {
       volume[1]=constrain(volume[1]-5, 0, 127);
+
       <br>volume[1]=constrain(volume[1]-5, 0, 127);
       if (camera[1]) {
+
       <br>if (camera[1]) {
         sequencer_video.set_volume(volume[1]);
+
         <br>sequencer_video.set_volume(volume[1]);
       } else {
+
       <br>} else {
         sequencer[1].set_volume(volume[1]);
+
         <br>sequencer[1].set_volume(volume[1]);
       }
+
       <br>}
     }
+
     <br>}
   } else if (key=='h'||key=='H') {
+
   <br>} else if (key=='h'||key=='H') {
     if (music[1]) {
+
     <br>if (music[1]) {
       volume[1]=constrain(volume[1]+5, 0, 127);
+
       <br>volume[1]=constrain(volume[1]+5, 0, 127);
       if (camera[1]) {
+
       <br>if (camera[1]) {
         sequencer_video.set_volume(volume[1]);
+
         <br>sequencer_video.set_volume(volume[1]);
       } else {
+
       <br>} else {
         sequencer[1].set_volume(volume[1]);
+
         <br>sequencer[1].set_volume(volume[1]);
       }
+
       <br>}
     }
+
     <br>}
   }
+
   <br>}
   //track 3
+
   <br>//track 3
   else if (key=='z'||key=='Z') {
+
   <br>else if (key=='z'||key=='Z') {
     if (camera[0]==false &&camera[1]==false &&camera[2]==false) {
+
     <br>if (camera[0]==false &&camera[1]==false &&camera[2]==false) {
       camera[2]=true;
+
       <br>camera[2]=true;
     }
+
     <br>}
   } else if (key=='x'||key=='X') {
+
   <br>} else if (key=='x'||key=='X') {
     camera[2]=false;
+
     <br>camera[2]=false;
     if (music[2]) {
+
     <br>if (music[2]) {
       sequencer[2].get_sequence(sequencer_video.sequence());
+
       <br>sequencer[2].get_sequence(sequencer_video.sequence());
       sequencer[2].get_color(sequencer_video.grid_color());
+
       <br>sequencer[2].get_color(sequencer_video.grid_color());
     }
+
     <br>}
   } else if (key=='c'||key=='C') {
+
   <br>} else if (key=='c'||key=='C') {
     music[2]=true;
+
     <br>music[2]=true;
   } else if (key=='v'||key=='V') {
+
   <br>} else if (key=='v'||key=='V') {
     music[2]=false;
+
     <br>music[2]=false;
    sequencer[2].delete();
+
  <br>sequencer[2].delete();
   } else if (key=='b'||key=='B') {
+
   <br>} else if (key=='b'||key=='B') {
     if (music[2]) {
+
     <br>if (music[2]) {
       volume[2]=constrain(volume[2]-5, 0, 127);
+
       <br>volume[2]=constrain(volume[2]-5, 0, 127);
       if (camera[2]) {
+
       <br>if (camera[2]) {
         sequencer_video.set_volume(volume[2]);
+
         <br>sequencer_video.set_volume(volume[2]);
       } else {
+
       <br>} else {
         sequencer[2].set_volume(volume[2]);
+
         <br>sequencer[2].set_volume(volume[2]);
       }
+
       <br>}
     }
+
     <br>}
   } else if (key=='n'||key=='N') {
+
   <br>} else if (key=='n'||key=='N') {
     if (music[2]) {
+
     <br>if (music[2]) {
       volume[2]=constrain(volume[2]+5, 0, 127);
+
       <br>volume[2]=constrain(volume[2]+5, 0, 127);
       if (camera[2]) {
+
       <br>if (camera[2]) {
         sequencer_video.set_volume(volume[2]);
+
         <br>sequencer_video.set_volume(volume[2]);
       } else {
+
       <br>} else {
         sequencer[2].set_volume(volume[2]);
+
         <br>sequencer[2].set_volume(volume[2]);
       }
+
       <br>}
     }
+
     <br>}
   } else if (key=='o'||key=='O') {
+
   <br>} else if (key=='o'||key=='O') {
     tube=true;
+
     <br>tube=true;
   } else if (key=='p'||key=='P') {
+
   <br>} else if (key=='p'||key=='P') {
     tube=false;
+
     <br>tube=false;
   } else if (key==CODED) {
+
   <br>} else if (key==CODED) {
     if (keyCode==LEFT) {
+
     <br>if (keyCode==LEFT) {
       sequencer_video.threshold_down();
+
       <br>sequencer_video.threshold_down();
     } else if (keyCode==RIGHT) {
+
     <br>} else if (keyCode==RIGHT) {
       sequencer_video.threshold_up();
+
       <br>sequencer_video.threshold_up();
     } else if (keyCode==UP) {
+
     <br>} else if (keyCode==UP) {
       rack.volume_up();
+
       <br>rack.volume_up();
     } else if (keyCode==DOWN) {
+
     <br>} else if (keyCode==DOWN) {
       rack.volume_down();
+
       <br>rack.volume_down();
     }
+
     <br>}
   }
+
   <br>}
}
+
<br>}
  
  
void make_empty() {
+
<br><br>void make_empty() {
   for (int i=0; i<block_number; i++) {
+
   <br>for (int i=0; i<block_number; i++) {
     int x= pos_x(i);
+
     <br>int x= pos_x(i);
     int y=margin;
+
     <br>int y=margin;
     sequencer[i]=new Sequencer(sc, grid_num, grid_size, interval, x, y);
+
     <br>sequencer[i]=new Sequencer(sc, grid_num, grid_size, interval, x, y);
   }
+
   <br>}
}
+
<br>}
  
int pos_x(int i) {
+
<br><br>int pos_x(int i) {
   int x=margin+(grid_num*(grid_size+interval)+interval+margin)*i;
+
   <br>int x=margin+(grid_num*(grid_size+interval)+interval+margin)*i;
   return x;
+
   <br>return x;
}
+
<br>}
  
//tube rack
+
<br><br>//tube rack
class Rack {
+
<br>class Rack {
   Capture video;
+
   <br>Capture video;
   int tube_number=8;
+
   <br>int tube_number=8;
   int space_height;
+
   <br>int space_height;
   float[][] colors;
+
   <br>float[][] colors;
   SoundCipher sc;
+
   <br>SoundCipher sc;
   int white=150;
+
   <br>int white=150;
   float bright=1.5;
+
   <br>float bright=1.5;
   int volume=100;
+
   <br>int volume=100;
   int rack_width;
+
   <br>int rack_width;
   int rack_height;
+
   <br>int rack_height;
   int window_size;
+
   <br>int window_size;
   int window_height;
+
   <br>int window_height;
   int tube_height;
+
   <br>int tube_height;
   int tube_width;
+
   <br>int tube_width;
   int rack_x;
+
   <br>int rack_x;
   int rack_y;
+
   <br>int rack_y;
   int margin;
+
   <br>int margin;
  
   Rack(Capture _video, SoundCipher _sc, int _window_size,  
+
   <br><br>Rack(Capture _video, SoundCipher _sc, int _window_size,  
   int _window_height, int _space_height) {
+
   <br>int _window_height, int _space_height) {
     video=_video;
+
     <br>video=_video;
     window_size=_window_size;
+
     <br>window_size=_window_size;
     window_height=_window_height;
+
     <br>window_height=_window_height;
     space_height=_space_height;
+
     <br>space_height=_space_height;
     sc=_sc;
+
     <br>sc=_sc;
     rack_width=int(window_size*0.75);
+
     <br>rack_width=int(window_size*0.75);
     rack_height=space_height/2;
+
     <br>rack_height=space_height/2;
     tube_height=int(space_height*0.6);
+
     <br>tube_height=int(space_height*0.6);
     tube_width=int(rack_width/(tube_number*3));
+
     <br>tube_width=int(rack_width/(tube_number*3));
     rack_x=(window_size-rack_width)/2;
+
     <br>rack_x=(window_size-rack_width)/2;
     rack_y=int(space_height*0.3);
+
     <br>rack_y=int(space_height*0.3);
     margin=(rack_width-tube_number*tube_width)/(tube_number+1);
+
     <br>margin=(rack_width-tube_number*tube_width)/(tube_number+1);
   }
+
   <br>}
  
   void play(int n) {
+
   <br><br>void play(int n) {
    get_color();
+
  <br>get_color();
     draw_rack();
+
     <br>draw_rack();
     glow(n);
+
     <br>glow(n);
     play_sounds(n);
+
     <br>play_sounds(n);
   }
+
   <br>}
 
    
 
    
   void get_color() {
+
   <br><br>void get_color() {
     if (video.available()) {
+
     <br>if (video.available()) {
       video.read();
+
       <br>video.read();
       video.loadPixels();
+
       <br>video.loadPixels();
       colors=new float[tube_number][3];
+
       <br>colors=new float[tube_number][3];
       float[] loc_x = {0.1,0.215,0.333,0.45,0.569,0.705,0.823,0.941};
+
       <br>float[] loc_x = {0.1,0.215,0.333,0.45,0.569,0.705,0.823,0.941};
       for (int i = 0; i < tube_number; i++) {
+
       <br>for (int i = 0; i < tube_number; i++) {
         // Begin loop for rows
+
         <br>// Begin loop for rows
  
         // Where are we, pixel-wise?
+
         <br><br>// Where are we, pixel-wise?
         int x = int(width*loc_x[i]) ;
+
         <br>int x = int(width*loc_x[i]) ;
         int y = int(video.height*0.7);
+
         <br><br>int y = int(video.height*0.7);
         int loc = x + y*video.width;  
+
         <br>int loc = x + y*video.width;  
  
         colors[i][0] = red(video.pixels[loc]);
+
         <br><br>colors[i][0] = red(video.pixels[loc]);
         colors[i][1]= green(video.pixels[loc]);
+
         <br>colors[i][1]= green(video.pixels[loc]);
         colors[i][2]= blue(video.pixels[loc]);
+
         <br>colors[i][2]= blue(video.pixels[loc]);
       }
+
       <br>}
    }
+
  <br>}
   }
+
   <br>}
 
    
 
    
 
    
 
    
   void draw_rack() {
+
   <br><br>void draw_rack() {
     if (colors!=null) {
+
     <br>if (colors!=null) {
       pushMatrix();
+
       <br>pushMatrix();
       translate(0, window_height-space_height);
+
       <br>translate(0, window_height-space_height);
      noFill();
+
    <br>noFill();
       stroke(255);
+
       <br>stroke(255);
       strokeWeight(3);
+
       <br>strokeWeight(3);
       rect(rack_x, rack_y,  
+
       <br>rect(rack_x, rack_y,  
       rack_width, rack_height, rack_height/10);
+
       <br>rack_width, rack_height, rack_height/10);
       pushMatrix();
+
       <br>pushMatrix();
       translate(rack_x, rack_y);
+
       <br>translate(rack_x, rack_y);
       for (int i = 0; i < tube_number; i++) {
+
       <br>for (int i = 0; i < tube_number; i++) {
         pushMatrix();
+
         <br>pushMatrix();
         translate(margin*(i+1)+tube_width*i, -rack_y*0.6);
+
         <br>translate(margin*(i+1)+tube_width*i, -rack_y*0.6);
         if ((colors[i][0]+colors[i][1]+colors[i][2])/3<white) {
+
         <br>if ((colors[i][0]+colors[i][1]+colors[i][2])/3<white) {
           noStroke();
+
           <br>noStroke();
           fill(constrain(colors[i][0]*1.1,0,255),
+
           <br>fill(constrain(colors[i][0]*1.1,0,255),
         constrain(colors[i][1]*1.1,0,255),  
+
         <br>constrain(colors[i][1]*1.1,0,255),  
         constrain(colors[i][2]*1.1,0,255));
+
         <br>constrain(colors[i][2]*1.1,0,255));
           rect(0, 0, tube_width, tube_height,tube_width/2);
+
           <br>rect(0, 0, tube_width, tube_height,tube_width/2);
         } else {
+
         <br>} else {
           noFill();
+
           <br>noFill();
           stroke(255);
+
           <br>stroke(255);
           strokeWeight(3);
+
           <br>strokeWeight(3);
           rect(0, 0, tube_width, tube_height,tube_width/2);
+
           <br>rect(0, 0, tube_width, tube_height,tube_width/2);
         }
+
         <br>}
 
          
 
          
         popMatrix();
+
         <br><br>popMatrix();
       }
+
       <br>}
       popMatrix();
+
       <br>popMatrix();
       popMatrix();
+
       <br>popMatrix();
     }
+
     <br>}
   }
+
   <br>}
  
   void glow(int n) {
+
   <br><br>void glow(int n) {
     n=n%tube_number;
+
     <br>n=n%tube_number;
     if (colors!=null) {
+
     <br>if (colors!=null) {
       pushMatrix();
+
       <br>pushMatrix();
       translate(0, window_height-space_height);
+
       <br>translate(0, window_height-space_height);
       if ((colors[n][0]+colors[n][1]+colors[n][2])/3<white) {
+
       <br>if ((colors[n][0]+colors[n][1]+colors[n][2])/3<white) {
         pushMatrix();
+
         <br>pushMatrix();
         translate(rack_x, rack_y);
+
         <br>translate(rack_x, rack_y);
         pushMatrix();
+
         <br>pushMatrix();
         translate(margin*(n+1)+tube_width*n, -rack_y*0.6);
+
         <br>translate(margin*(n+1)+tube_width*n, -rack_y*0.6);
         fill(255, 255, 255, 40);
+
         <br>fill(255, 255, 255, 40);
         noStroke();
+
         <br>noStroke();
         rect(0, 0, tube_width, tube_height,tube_width/2);
+
         <br>rect(0, 0, tube_width, tube_height,tube_width/2);
         popMatrix();
+
         <br>popMatrix();
         popMatrix();
+
         <br>popMatrix();
       }
+
       <br>}
       popMatrix();
+
       <br>popMatrix();
     }
+
     <br>}
   }
+
   <br>}
  
     void play_sounds(int n) {
+
     <br><br>void play_sounds(int n) {
       n=n%tube_number;
+
       <br>n=n%tube_number;
       if (colors!=null) {
+
       <br>if (colors!=null) {
         float noteVal;
+
         <br>float noteVal;
         float[] noteVals=new float[0];
+
         <br>float[] noteVals=new float[0];
         boolean play;
+
         <br>boolean play;
         if ((colors[n%tube_number][0]+colors[n%tube_number][1]
+
         <br>if ((colors[n%tube_number][0]+colors[n%tube_number][1]
           +colors[n%tube_number][2])/3<white) {
+
           <br>+colors[n%tube_number][2])/3<white) {
           play=true;
+
           <br>play=true;
         } else {
+
         <br>} else {
           play=false;
+
           <br>play=false;
         }
+
         <br>}
         if (play) {
+
         <br>if (play) {
           noteVal = noteVal(n);
+
           <br>noteVal = noteVal(n);
           noteVals=append(noteVals, noteVal);
+
           <br>noteVals=append(noteVals, noteVal);
         }
+
         <br>}
         sc.instrument(instrument(n));
+
         <br>sc.instrument(instrument(n));
         println(instrument(n));
+
         <br>println(instrument(n));
         sc.playChord(noteVals, volume, 0.25);
+
         <br>sc.playChord(noteVals, volume, 0.25);
       }
+
       <br>}
     }
+
     <br>}
  
 
   int instrument(int n){
 
   int instrument(int n){
Line 1,025: Line 1,025:
  
 
<br><br>soundcipher
 
<br><br>soundcipher
http://explodingart.com/soundcipher/
 
 
 
 
 
 
 
 
 
Source: blob detection
 
http://www.v3ga.net/processing/BlobDetection/
 
 
soundcipher
 
 
http://explodingart.com/soundcipher/
 
http://explodingart.com/soundcipher/
  

Revision as of 06:17, 10 September 2015

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]) {
.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; iint x= pos_x(i);
int y=margin;
sequencer[i]=new Sequencer(sc, grid_num, grid_size, interval, x, y);
}
}

int pos_x(int i) {
int x=margin+(grid_num*(grid_size+interval)+interval+margin)*i;
return x;
}

//tube rack
class Rack {
Capture video;
int tube_number=8;
int space_height;
float[][] colors;
SoundCipher sc;
int white=150;
float bright=1.5;
int volume=100;
int rack_width;
int rack_height;
int window_size;
int window_height;
int tube_height;
int tube_width;
int rack_x;
int rack_y;
int margin;

Rack(Capture _video, SoundCipher _sc, int _window_size,
int _window_height, int _space_height) {
video=_video;
window_size=_window_size;
window_height=_window_height;
space_height=_space_height;
sc=_sc;
rack_width=int(window_size*0.75);
rack_height=space_height/2;
tube_height=int(space_height*0.6);
tube_width=int(rack_width/(tube_number*3));
rack_x=(window_size-rack_width)/2;
rack_y=int(space_height*0.3);
margin=(rack_width-tube_number*tube_width)/(tube_number+1);
}

void play(int n) {
get_color();
draw_rack();
glow(n);
play_sounds(n);
}

void get_color() {
if (video.available()) {
video.read();
video.loadPixels();
colors=new float[tube_number][3];
float[] loc_x = {0.1,0.215,0.333,0.45,0.569,0.705,0.823,0.941};
for (int i = 0; i < tube_number; i++) {
// Begin loop for rows

// Where are we, pixel-wise?
int x = int(width*loc_x[i]) ;

int y = int(video.height*0.7);
int loc = x + y*video.width;

colors[i][0] = red(video.pixels[loc]);
colors[i][1]= green(video.pixels[loc]);
colors[i][2]= blue(video.pixels[loc]);
}
}
}

void draw_rack() {
if (colors!=null) {
pushMatrix();
translate(0, window_height-space_height);
noFill();
stroke(255);
strokeWeight(3);
rect(rack_x, rack_y,
rack_width, rack_height, rack_height/10);
pushMatrix();
translate(rack_x, rack_y);
for (int i = 0; i < tube_number; i++) {
pushMatrix();
translate(margin*(i+1)+tube_width*i, -rack_y*0.6);
if ((colors[i][0]+colors[i][1]+colors[i][2])/3noStroke();
fill(constrain(colors[i][0]*1.1,0,255),
constrain(colors[i][1]*1.1,0,255),
constrain(colors[i][2]*1.1,0,255));
rect(0, 0, tube_width, tube_height,tube_width/2);
} else {
noFill();
stroke(255);
strokeWeight(3);
rect(0, 0, tube_width, tube_height,tube_width/2);
}

popMatrix();
}
popMatrix();
popMatrix();
}
}

void glow(int n) {
n=n%tube_number;
if (colors!=null) {
pushMatrix();
translate(0, window_height-space_height);
if ((colors[n][0]+colors[n][1]+colors[n][2])/3pushMatrix();
translate(rack_x, rack_y);
pushMatrix();
translate(margin*(n+1)+tube_width*n, -rack_y*0.6);
fill(255, 255, 255, 40);
noStroke();
rect(0, 0, tube_width, tube_height,tube_width/2);
popMatrix();
popMatrix();
}
popMatrix();
}
}

void play_sounds(int n) {
n=n%tube_number;
if (colors!=null) {
float noteVal;
float[] noteVals=new float[0];
boolean play;
if ((colors[n%tube_number][0]+colors[n%tube_number][1]
+colors[n%tube_number][2])/3play=true;
} else {
play=false;
}
if (play) {
noteVal = noteVal(n);
noteVals=append(noteVals, noteVal);
}
sc.instrument(instrument(n));
println(instrument(n));
sc.playChord(noteVals, volume, 0.25);
}
} int instrument(int n){ int h=int(hue(color(colors[n][0],colors[n][1], colors[n][2]))%6); if (h==0){return 38;} else if (h==1){return 103;} else if (h==2){return 112;} else if (h==3){return 113;} else if (h==4){return 117;} else {return 124;} } int noteVal(int n){ int h=int(hue(color(colors[n][0],colors[n][1], colors[n][2]))%6); if (h==0){return 14;} else if (h==1){return 20;} else if (h==2){return 24;} else if (h==3){return 60;} else if (h==4){return 96;} else {return 60;} } void volume_up() { volume=constrain(volume+5, 0, 127); } void volume_down() { volume=constrain(volume-5, 0, 127); } } //step sequencer class Sequencer { boolean[] empty; float[] rgb_list; int grid_num; int grid_size; int interval; SoundCipher sc; boolean select=false; int a, b; int volume=0; boolean on=true; float red=0; float green=0; float blue=0; int[] notes = { 96, 93, 91, 89, 86, 84, 81, 79, 77, 74, 72, 69, 67, 65, 62, 60 }; boolean[] sequence; Sequencer(SoundCipher _sc, int _grid_num, int _grid_size, int _interval, int _a, int _b) { sc=_sc; grid_num=_grid_num; grid_size=_grid_size; interval=_interval; a=_a; b=_b; sequence=new boolean[grid_num*grid_num]; 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/