Minim core
ugens
analysis
Name MoogFilter
Description 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.
Examples
/* 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 ); 
}
Constructors
MoogFilter(frequencyInHz, normalizedResonance);
MoogFilter(frequencyInHz, normalizedResonance, 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)
Fields
audio   The main audio input where the the UGen you want to filter should be patched.

frequency   The cutoff (or center) frequency of the filter, expressed in Hz.

resonance   The resonance of the filter, expressed as a normalized value [0,1].

type   The current type of this filter: low pass, high pass, or band pass.

Methods
channelCount ( )   Returns the number of channels this UGen has been configured to generate.

getLastValues ( )   Return the last values generated by this UGen. This will most often be used by sub-classes when pulling data from their inputs.

patch ( )   Send the output of this UGen to another UGen, UGenInput, or AudioOutput.

printInputs ( )   Prints all inputs connected to this UGen (for debugging)

sampleRate ( )   Returns the sample rate of this UGen.

setChannelCount ( )   Let this UGen know how many channels of audio you will be asking it for.

setSampleRate ( )   Set the sample rate for this UGen.

tick ( )   Generates one sample frame for this UGen.

unpatch ( )   Unpatch this UGen from an AudioOutput or other UGen.

Usage Web & Application
Related UGen