1 #ifndef STK_BLITSQUARE_H
2 #define STK_BLITSQUARE_H
58 void setPhase( StkFloat phase ) { phase_ = PI * phase; };
64 StkFloat
getPhase()
const {
return phase_ / PI; };
85 StkFloat
lastOut(
void )
const {
return lastFrame_[0]; };
88 StkFloat
tick(
void );
102 void updateHarmonics(
void );
104 unsigned int nHarmonics_;
110 StkFloat lastBlitOutput_;
116 StkFloat temp = lastBlitOutput_;
126 StkFloat denominator = sin( phase_ );
127 if ( fabs( denominator ) < std::numeric_limits<StkFloat>::epsilon() ) {
129 if ( phase_ < 0.1f || phase_ > TWO_PI - 0.1f )
130 lastBlitOutput_ = a_;
132 lastBlitOutput_ = -a_;
135 lastBlitOutput_ = sin( m_ * phase_ );
136 lastBlitOutput_ /= p_ * denominator;
139 lastBlitOutput_ += temp;
142 lastFrame_[0] = lastBlitOutput_ - dcbState_ + 0.999 * lastFrame_[0];
143 dcbState_ = lastBlitOutput_;
146 if ( phase_ >= TWO_PI ) phase_ -= TWO_PI;
148 return lastFrame_[0];
153 #if defined(_STK_DEBUG_)
154 if ( channel >= frames.
channels() ) {
155 oStream_ <<
"BlitSquare::tick(): channel and StkFrames arguments are incompatible!";
160 StkFloat *samples = &frames[channel];
161 unsigned int hop = frames.
channels();
162 for (
unsigned int i=0; i<frames.
frames(); i++, samples += hop )