topical media & game development

talk show tell print

graphic-processing-site-examples-Libraries-Minim--Sound--LinearAverages-LinearAverages.pde / pde



  
Linear Averages by Damien Di Fede. This sketch demonstrates how to use the averaging abilities of the FFT. 128 linearly spaced averages are requested and then those are drawn as rectangles.

  
  
  import ddf.minim.analysis.*;
  import ddf.minim.*;
  
  Minim minim;
  AudioPlayer jingle;
  FFT fft;
  
  void setup()
  {
    size(512, 200, P3D);
    minim = new Minim(this);
    
    jingle = minim.loadFile("jingle.mp3", 2048);
    // loop the file
    jingle.loop();
    // create an FFT object that has a time-domain buffer the same size as jingle's sample buffer
    // and a sample rate that is the same as jingle's
    // note that this needs to be a power of two 
    // and that it means the size of the spectrum will be 1024. 
    // see the online tutorial for more info.
    fft = new FFT(jingle.bufferSize(), jingle.sampleRate());
    // use 128 averages.
    // the maximum number of averages we could ask for is half the spectrum size. 
    fft.linAverages(128);
    rectMode(CORNERS);
  }
  
  void draw()
  {
    background(0);
    fill(255);
    // perform a forward FFT on the samples in jingle's mix buffer
    // note that if jingle were a MONO file, this would be the same as using jingle.left or jingle.right
    fft.forward(jingle.mix);
    int w = int(fft.specSize()/128);
    for(int i = 0; i < fft.avgSize(); i++)
    {
      // draw a rectangle for each average, multiply the value by 5 so we can see it better
      rect(i*w, height, i*w + w, height - fft.getAvg(i)*5);
    }
  }
  
  void stop()
  {
    // always close Minim audio classes when you finish with them
    jingle.close();
    minim.stop();
    
    super.stop();
  }
  


(C) Æliens 20/2/2008

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.