Biquad filters

I describe "efficient biquad filters for lowpass, highpass, and other common
filter" in my specification proposal here:

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:

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.


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