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 draw() {
  background(0,5)
  //noStroke()
  if(millis()-last_time> 50){
      s = fft.analyze(256)
  spectrums.unshift(s)
  if(spectrums.length > 40){
    spectrums.splice(-1,1)
  }
  last_time=millis()
  }
  for(si=spectrums.length-1;si>0;si--){
    push()
    //shearX(-radians(10))
    beginShape()
   // noStroke()
   vertex(si*20,height/2)
  fill(spectrums[si][0]%100,spectrums[si][0]%100,100)
    for(i=0;i<spectrums[si].length;i++){
      v = spectrums[si][i]
      y = height/2-(si*20)
      x = si*20+(i*10)
    //line(i,y,i,y-v)
    //noStroke()
    //  fill(spectrums[si][i]%100,100,100)
      //ellipse(x,y,si*5,-v) 
     vertex(x,y-v)
    }
    endShape()
    pop()
    v =  spectrums[0][0]
   x = map(v,0,255,0,width)
//   x = width/2
   y= height/2
push()
 fill(200,220,10)
  ellipse(x,y,300,300)
//fill(spectrum[0][100],200,200)

pop()
 fill(10,100,10)
   v2 =  spectrums[0][100]
   x2 = map(v2,0,255,width,0)
   rect(x2,y,300,300)
  }
}