[Stk] Wah-wah filter? UPDATE for STK using BiQuad

Robert Oschler robert.oschler at gmail.com
Tue Oct 8 11:30:05 PDT 2013


Hello Perry,

Thanks for the STK code.  Pardon the newbie question but I am new to
STK.  Which parameter(s) in the code sample do I change over time to
control the Wah sweep if I want to attach the effect to a custom
controller?

Robert

On Tue, Oct 8, 2013 at 2:05 PM, Perry Cook <prc at cs.princeton.edu> wrote:
> Howdy!!  My recent hacking of the Raspberry Pi have renewed my
> enthusiasm for, and appreciation of, STK.
>
> Today's Wah Wah update for the STK people.  I dug into ChucK's ResonZ
> filter source code, and it turns out that it (of course) inherits from BiQuad.
>
> I did a test comparing ResonZ and BiQuad (in ChucK), and they seem
> to generate basically the same thing as long as I set the coefficients correctly.
> Duh, huh?
>
> I hacked a new version of the STK effects project, adding WahWah as
> a radio button and condition.  Fairly minimal changes to effects.cpp,
> and adding BiQuad.o to the Makefile.  That new project all lives at:
>
> http://www.cs.princeton.edu/~prc/STKHacks/effectsWithWah.zip
>
> Punchline:
>
> You can make a BiQuad (or subclass it) , and set equal gain zeroes,
> and set the frequency and radius thusly:
>
> // given a float value named "temp" ranging from 0.0 to 1.0
> // and an STK BiQuad filter named wahwah,
> // in the main controller service functions, add this:
>
> case 22: // effect parameter change 1
> .
> .  OTHER STUFF for Other EFX
> .
>
> {  // new block for wahWah servicing
>           float freqs[3] = {460.0,840,2250}; // JOS data
>           float Qs[3] = {9.4,4.0,2.0};      // from his pedal
>           float myFreq, myQ;
>           if (temp < 0.5) {
>              myFreq = freqs[0] +
>                 ((freqs[1]-freqs[0])*2.0*temp);
>              myQ = Qs[0] +
>                 ((Qs[1]-Qs[0])*2.0*temp);
>           }
>           else  {
>              myFreq = freqs[1] +
>                 ((freqs[2]-freqs[1])*2.0*(temp-0.5));
>              myQ = Qs[1] +
>                 ((Qs[2]-Qs[1])*2.0*(temp-0.5));
>           }
>           data->wahwah.setEqualGainZeroes();
>           float pFreq = myFreq * TWO_PI / SRATE;
>           float bandwidth = pFreq / myQ;
>           float radius = 1.0 - (bandwidth * 0.5);
>           data->wahwah.setResonance(myFreq,radius,1);
>       }
>
> ********************************************************
> // For the bilingual, here's my ChucK test program to
> // compare the ResonZ to BiQuad:
>
> Noise nz => ResonZ wah => WvOut left => dac;
> nz =>       BiQuad wah2 => WvOut right => dac;
> "left.wav" => left.wavFilename;
> "right.wav" => right.wavFilename;
>
> 0.3 => nz.gain;
>
>     [460.0,840,2250] @=> float freqs[]; // JOS data
>     [9.4,4.0,2.0] @=> float Qs[];      // from his pedal
>
> 1 => wah2.eqzs;
>
> for (0 => int i; i < 3; i++)  {
>     (freqs[i],Qs[i]) => wah.set;
>     freqs[i]*6.28/44100.0 => float pFreq;
>     pFreq / Qs[i] => float bandwidth;
>     1.0 - (bandwidth * 0.5) => float radius;
>     freqs[i] => wah2.pfreq;
>     radius => wah2.prad;
>     (1.0 - radius*radius) * 0.5 => wah2.gain;
>     2.0 :: second => now;
> }
>
> left.closeFile();
> right.closeFile();
>
> /// END



-- 
Thanks,
Robert Oschler
Twitter -> http://twitter.com/roschler
http://www.RobotsRule.com/
http://www.Robodance.com/



More information about the Stk mailing list