import ddf.minim.spi.*;
import ddf.minim.signals.*;
import ddf.minim.*;
import ddf.minim.analysis.*;
import ddf.minim.ugens.*;
import ddf.minim.effects.*;
Minim minim;
AudioInput in;
ArrayList<Ripple> ripples;
float pLevel;
void setup(){
size(500, 500);
frameRate(60);
minim = new Minim(this);
in = minim.getLineIn(Minim.STEREO, 512);
ripples = new ArrayList<Ripple>();
pLevel = 0.0;
}
void draw(){
background(0);
float level = in.mix.level();
println(level);
if(level > 0.1 && pLevel < 0.1){
float alpha = level < 0.2 ? 255 * ((level - 0.1) / (0.2 - 0.1)): 255.0;
ripples.add(new Ripple(alpha));
}
pLevel = level;
ArrayList<Ripple> deads = new ArrayList<Ripple>();
for(Ripple ripple: ripples){
ripple.drawMe();
ripple.update();
if(ripple.isDead()){
deads.add(ripple);
}
}
for(Ripple dead: deads){
ripples.remove(dead);
}
}
void stop(){
in.close();
minim.stop();
super.stop();
}
class Ripple {
float x;
float y;
float radious;
float alpha;
Ripple(float alpha){
x = random(0, width);
y = random(0, height);
radious = 0.0;
this.alpha = alpha;
}
void drawMe(){
stroke(255, alpha);
strokeWeight(2);
noFill();
ellipse(x, y, radious * 2, radious * 2);
}
void update(){
radious += 3.0;
alpha -= 5.0;
}
boolean isDead(){
if(alpha < 30){
return true;
} else {
return false;
}
}
}