Biquad filters

I describe "efficient biquad filters for lowpass, highpass, and other common
filter" in my specification proposal here:
http://chromium.googlecode.com/svn/trunk/samples/audio/specification/specification.html#Features-section

Up to this point there have been undocumented LowPass2FilterNode
and HighPass2FilterNode AudioNodes which
are created with these two AudioContext methods:

interface AudioContext {
   .
   .
   LowPass2FilterNode createLowPass2Filter();
   HighPass2FilterNode createHighPass2Filter();
    .
    .
    .
}

Since I believe this approach doesn't scale well to the larger family of
filter types, a BiquadFilterNode seems better:
I discuss the possibility of BiquadFilterNode in my specification proposal
in the API Overview section:
http://chromium.googlecode.com/svn/trunk/samples/audio/specification/specification.html#APIOverview-section


I've had a go at implementing this with a new createBiquadFilter() method
and three parametric BiquadFilterNode AudioParams: frequency, Q, gain


interface AudioContext {
   .
   .
   BiquadFilterNode createBiquadFilter();
    .
    .
    .
}


BiquadFilterNode : AudioNode {
    // Filter type.
    const unsigned short LOWPASS = 0;
    const unsigned short HIGHPASS = 1;
    const unsigned short BANDPASS = 2;
    const unsigned short LOWSHELF = 3;
    const unsigned short HIGHSHELF = 4;
    const unsigned short PEAKING = 5;
    const unsigned short NOTCH = 6;
    const unsigned short ALLPASS = 7;

    attribute unsigned short type;
    readonly attribute AudioParam frequency; // in Hertz
    readonly attribute AudioParam Q; // Quality factor
    readonly attribute AudioParam gain; // in Decibels
};

An implementation of this is available in the latest Chrome canary builds.

I hope to update the specification proposal soon with this IDL as well as
some more detailed background.

Chris

Received on Thursday, 9 June 2011 19:06:44 UTC