26 Filter(
void ) { gain_ = 1.0; channelsIn_ = 1; lastFrame_.
resize( 1, 1, 0.0 ); };
29 unsigned int channelsIn(
void )
const {
return channelsIn_; };
35 virtual void clear(
void );
42 void setGain( StkFloat gain ) { gain_ = gain; };
45 StkFloat
getGain(
void )
const {
return gain_; };
72 unsigned int channelsIn_;
75 std::vector<StkFloat> b_;
76 std::vector<StkFloat> a_;
85 for ( i=0; i<inputs_.
size(); i++ )
87 for ( i=0; i<outputs_.
size(); i++ )
89 for ( i=0; i<lastFrame_.
size(); i++ )
96 oStream_ <<
"Filter::phaseDelay: argument (" << frequency <<
") is out of range!";
101 StkFloat real = 0.0, imag = 0.0;
102 for (
unsigned int i=0; i<b_.size(); i++ ) {
103 real += b_[i] * std::cos( i * omegaT );
104 imag -= b_[i] * std::sin( i * omegaT );
109 StkFloat phase = atan2( imag, real );
111 real = 0.0, imag = 0.0;
112 for (
unsigned int i=0; i<a_.size(); i++ ) {
113 real += a_[i] * std::cos( i * omegaT );
114 imag -= a_[i] * std::sin( i * omegaT );
117 phase -= std::atan2( imag, real );
118 phase = std::fmod( -phase, 2 * PI );
119 return phase / omegaT;