Minim
core | ugens | analysis
 

MoogFilter

Fields

Methods

MoogFilter is a digital model of a Moog 24 dB/octave resonant VCF. It can be set to low pass, high pass, or band pass using the MoogFilter.Type enumeration. More generally, a filter is used to remove certain ranges of the audio spectrum from a sound. A low pass filter will allow frequencies below the cutoff frequency to be heard, a high pass filter allows frequencies above the cutoff frequency to be heard, a band pass filter will allow frequencies to either side of the center frequency to be heard. With MoogFilter, the cutoff frequency and the center frequency are set using the frequency input. Because this is a resonant filter, it means that frequencies close to the cutoff of center frequency will become slighly emphasized, depending on the value of the resonance input. The resonance of the filter has a range from 0 to 1, where as the resonance approaches 1 the filter will begin to "ring" at the cutoff frequency.

Constructors

Creates a low pass filter.
MoogFilter(float frequencyInHz, float normalizedResonance)
Creates a filter of the type specified.
MoogFilter(float frequencyInHz, float normalizedResonance, MoogFilter.Type filterType)

Parameters

frequencyInHz — float: the cutoff frequency for the filter
normalizedResonance — float: the resonance of the filter [0,1]
filterType — the type of the filter: MoogFilter.Type.HP (high pass), MoogFitler.Type.LP (low pass), or MoogFilter.Type.BP (band pass)

Related

UGen

Example

/* moogFilterExample<br/>
 * is an example of using a MoogFilter to filter white noise.<br/> 
 * Use the mouse to control the cutoff frequency and resonance of the filter.<br/>
 * Press 1 to set it to low pass<br/>
 * Press 2 to set it to high pass<br/>
 * Press 3 to set it to band pass<br/>
 * <p>
 * For more information about Minim and additional features, 
 * visit http://code.compartmental.net/minim/
 * <p> 
 * author: Damien Di Fede
 */

// import everything necessary to make sound.
import ddf.minim.*;
import ddf.minim.ugens.*;

// create all of the variables that will need to be accessed in
// more than one methods (setup(), draw(), stop()).
Minim       minim;
AudioOutput out;
MoogFilter  moog;

// setup is run once at the beginning
void setup()
{
// initialize the drawing window
  size(300, 300);
  
  // initialize the minim and out objects
  minim   = new Minim(this);
  out     = minim.getLineOut();
  // construct a law pass MoogFilter with a 
  // cutoff frequency of 1200 Hz and a resonance of 0.5
  moog    = new MoogFilter( 1200, 0.5 );
  
  // we will filter a white noise source,
  // which will allow us to hear the result of filtering
  Noise noize = new Noise( 0.5f );  

  // send the noise through the filter
  noize.patch( moog ).patch( out );
}

// we'll control the frequency and resonance of the filter
// using the position of the mouse, in typical x-y controller fashion
void mouseMoved()
{
  float freq = constrain( map( mouseX, 0, width, 200, 12000 ), 200, 12000 );
  float rez  = constrain( map( mouseY, height, 0, 0, 1 ), 0, 1 );
  
  moog.frequency.setLastValue( freq );
  moog.resonance.setLastValue( rez  );
}

void keyPressed()
{
  if ( key == '1' ) moog.type = MoogFilter.Type.LP;
  if ( key == '2' ) moog.type = MoogFilter.Type.HP;
  if ( key == '3' ) moog.type = MoogFilter.Type.BP;
}

// draw is run many times
void draw()
{
  // erase the window to black
  background( 0 );
  // draw using a white stroke
  stroke( 255 );
  // draw the waveforms
  for( int i = 0; i < out.bufferSize() - 1; i++ )
  {
    // find the x position of each buffer value
    float x1  =  map( i, 0, out.bufferSize(), 0, width );
    float x2  =  map( i+1, 0, out.bufferSize(), 0, width );
    // draw a line from one buffer position to the next for both channels
    line( x1, 50 + out.left.get(i)*50, x2, 50 + out.left.get(i+1)*50);
    line( x1, 150 + out.right.get(i)*50, x2, 150 + out.right.get(i+1)*50);
  } 
  
  text( "Filter type: " + moog.type, 10, 225 );
  text( "Filter cutoff: " + moog.frequency.getLastValue() + " Hz", 10, 245 );
  text( "Filter resonance: " + moog.resonance.getLastValue(), 10, 265 ); 
}

Usage

Web & Application