57 void noteOn( StkFloat frequency, StkFloat amplitude );
60 void noteOff( StkFloat amplitude );
66 StkFloat
tick(
unsigned int channel = 0 );
86 StkFloat maxPressure_;
88 StkFloat vibratoGain_;
95 StkFloat breathPressure;
96 StkFloat randPressure;
97 StkFloat pressureDiff;
100 breathPressure = maxPressure_ * adsr_.
tick();
101 breathPressure += vibratoGain_ * vibrato_.
tick();
103 pressureDiff = breathPressure - resonator_.
lastOut();
105 randPressure = noiseGain_ * noise_.
tick();
106 randPressure *= breathPressure;
107 randPressure *= (1.0 + pressureDiff);
109 resonator_.
tick( breathPressure + randPressure - ( jetTable_.
tick( pressureDiff ) * pressureDiff ) );
110 lastFrame_[0] = 0.2 * outputGain_ * dcBlock_.
tick( pressureDiff );
112 return lastFrame_[0];
117 unsigned int nChannels = lastFrame_.
channels();
118 #if defined(_STK_DEBUG_)
119 if ( channel > frames.
channels() - nChannels ) {
120 oStream_ <<
"BlowBotl::tick(): channel and StkFrames arguments are incompatible!";
125 StkFloat *samples = &frames[channel];
126 unsigned int j, hop = frames.
channels() - nChannels;
127 if ( nChannels == 1 ) {
128 for (
unsigned int i=0; i<frames.
frames(); i++, samples += hop )
132 for (
unsigned int i=0; i<frames.
frames(); i++, samples += hop ) {
134 for ( j=1; j<nChannels; j++ )
135 *samples++ = lastFrame_[j];