submission by jtoy
var fft,mic;
function setup(){
  var myCanvas = createCanvas(windowWidth,windowHeight); //you must keep this line unmodified
  fft = new p5.FFT();
  ellipse(400,400,50,50)
  colorMode(HSB,100)
  spectrums=[]
  mic = new p5.AudioIn();
  mic.start();
  fft = new p5.FFT();
  fft.setInput(mic);
  last_time = millis()
}

function recurse(x,y,v){
  fill(v,v%100,100)
  ellipse(x,y, v/4,v/4)
  
  if(v/2 > .05){
//    recurse(x,y,v/2)
  }

}

function draw() {
  background(0,5)
  //noStroke()
  //if(millis()-last_time> 50){
      s = fft.analyze(256)
  last_time=millis()
//}
  //spectrums.unshift(s)
  //if(spectrums.length > 40){
   // spectrums.splice(-1,1)
  //}

  //fill(spectrums[si][0]%100,spectrums[si][0]%100,100)

   for(i=0;i<s.length;i++){
     recurse(i,height/2,v)

}
}