topical media & game development

talk show tell print

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



  
Band Pass Filter by Damien Di Fede. This sketch demonstrates how to use the BandPass effect. Move the mouse left and right to change the frequency of the pass band. Move the mouse up and down to change the band width of the pass band.

  
  
  import ddf.minim.*;
  import ddf.minim.effects.*;
  
  Minim minim;
  AudioPlayer groove;
  BandPass bpf;
  
  void setup()
  {
    size(512, 200, P3D);
    
    minim = new Minim(this);
    
    groove = minim.loadFile("groove.mp3");
    groove.loop();
    // make a band pass filter with a center frequency of 440 Hz and a bandwidth of 20 Hz
    // the third argument is the sample rate of the audio that will be filtered
    // it is required to correctly compute values used by the filter
    bpf = new BandPass(440, 20, groove.sampleRate());
    groove.addEffect(bpf);
  }
  
  void draw()
  {
    background(0);
    stroke(255);
    // draw the waveforms
    // the values returned by left.get() and right.get() will be between -1 and 1,
    // so we need to scale them up to see the waveform
    for(int i = 0; i < groove.right.size()-1; i++)
    {
      float x1 = map(i, 0, groove.bufferSize(), 0, width);
      float x2 = map(i+1, 0, groove.bufferSize(), 0, width);
      line(x1, height/4 - groove.left.get(i)*50, x2, height/4 - groove.left.get(i+1)*50);
      line(x1, 3*height/4 - groove.right.get(i)*50, x2, 3*height/4 - groove.right.get(i+1)*50);
    }
    // draw a rectangle to represent the pass band
    noStroke();
    fill(255, 0, 0, 60);
    rect(mouseX - bpf.getBandWidth()/20, 0, bpf.getBandWidth()/10, height);
  }
  
  void mouseMoved()
  {
    // map the mouse position to the range [100, 10000], an arbitrary range of passBand frequencies
    float passBand = map(mouseX, 0, width, 100, 2000);
    bpf.setFreq(passBand);
    float bandWidth = map(mouseY, 0, height, 50, 500);
    bpf.setBandWidth(bandWidth);
    // prints the new values of the coefficients in the console
    bpf.printCoeff();
  }
  
  void stop()
  {
    // always close Minim audio classes when you finish with them
    groove.close();
    // always stop Minim before exiting
    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.