Home Information Classes Download Usage Mail List Requirements Links FAQ Tutorial
00001 /***************************************************/ 00013 /***************************************************/ 00014 00015 #ifndef STK_BIQUAD_H 00016 #define STK_BIQUAD_H 00017 00018 #include "Filter.h" 00019 00020 class BiQuad : protected Filter 00021 { 00022 public: 00023 00025 BiQuad(); 00026 00028 virtual ~BiQuad(); 00029 00031 void ignoreSampleRateChange( bool ignore = true ) { ignoreSampleRateChange_ = ignore; }; 00032 00034 void clear(void); 00035 00037 void setB0(StkFloat b0); 00038 00040 void setB1(StkFloat b1); 00041 00043 void setB2(StkFloat b2); 00044 00046 void setA1(StkFloat a1); 00047 00049 void setA2(StkFloat a2); 00050 00052 00063 void setResonance(StkFloat frequency, StkFloat radius, bool normalize = false); 00064 00066 00072 void setNotch(StkFloat frequency, StkFloat radius); 00073 00075 00081 void setEqualGainZeroes(); 00082 00084 00088 void setGain(StkFloat gain); 00089 00091 StkFloat getGain(void) const; 00092 00094 StkFloat lastOut(void) const; 00095 00097 virtual StkFloat tick(StkFloat sample); 00098 00100 00106 virtual StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ); 00107 00108 protected: 00109 00110 // This function must be implemented in all subclasses. It is used 00111 // to get around a C++ problem with overloaded virtual functions. 00112 virtual StkFloat computeSample( StkFloat input ); 00113 virtual void sampleRateChanged( StkFloat newRate, StkFloat oldRate ); 00114 }; 00115 00116 inline StkFloat BiQuad :: computeSample( StkFloat input ) 00117 { 00118 inputs_[0] = gain_ * input; 00119 outputs_[0] = b_[0] * inputs_[0] + b_[1] * inputs_[1] + b_[2] * inputs_[2]; 00120 outputs_[0] -= a_[2] * outputs_[2] + a_[1] * outputs_[1]; 00121 inputs_[2] = inputs_[1]; 00122 inputs_[1] = inputs_[0]; 00123 outputs_[2] = outputs_[1]; 00124 outputs_[1] = outputs_[0]; 00125 00126 return outputs_[0]; 00127 } 00128 00129 inline StkFloat BiQuad :: tick( StkFloat input ) 00130 { 00131 return this->computeSample( input ); 00132 } 00133 00134 inline StkFrames& BiQuad :: tick( StkFrames& frames, unsigned int channel ) 00135 { 00136 return Filter::tick( frames, channel ); 00137 } 00138 00139 #endif
The Synthesis ToolKit in C++ (STK) |
©1995-2007 Perry R. Cook and Gary P. Scavone. All Rights Reserved. |