46 Flute( StkFloat lowestFrequency );
73 void noteOn( StkFloat frequency, StkFloat amplitude );
82 StkFloat
tick(
unsigned int channel = 0 );
105 StkFloat lastFrequency_;
106 StkFloat maxPressure_;
107 StkFloat jetReflection_;
108 StkFloat endReflection_;
110 StkFloat vibratoGain_;
111 StkFloat outputGain_;
116inline StkFloat Flute :: tick(
unsigned int )
118 StkFloat pressureDiff;
119 StkFloat breathPressure;
122 breathPressure = maxPressure_ * adsr_.
tick();
123 breathPressure += breathPressure * ( noiseGain_ * noise_.tick() + vibratoGain_ * vibrato_.tick() );
125 StkFloat temp = -filter_.tick( boreDelay_.lastOut() );
128 pressureDiff = breathPressure - (jetReflection_ * temp);
129 pressureDiff = jetDelay_.tick( pressureDiff );
131 pressureDiff = dcBlock_.tick(jetTable_.tick( pressureDiff )) + (endReflection_ * temp);
132 lastFrame_[0] = (StkFloat) 0.3 * boreDelay_.tick( pressureDiff );
134 lastFrame_[0] *= outputGain_;
135 return lastFrame_[0];
140 unsigned int nChannels = lastFrame_.
channels();
141#if defined(_STK_DEBUG_)
142 if ( channel > frames.
channels() - nChannels ) {
143 oStream_ <<
"Flute::tick(): channel and StkFrames arguments are incompatible!";
144 handleError( StkError::FUNCTION_ARGUMENT );
148 StkFloat *samples = &frames[channel];
149 unsigned int j, hop = frames.
channels() - nChannels;
150 if ( nChannels == 1 ) {
151 for (
unsigned int i=0; i<frames.
frames(); i++, samples += hop )
155 for (
unsigned int i=0; i<frames.
frames(); i++, samples += hop ) {
157 for ( j=1; j<nChannels; j++ )
158 *samples++ = lastFrame_[j];
STK ADSR envelope class.
Definition ADSR.h:25
STK linear interpolating delay line class.
Definition DelayL.h:28
STK flute physical model class.
Definition Flute.h:40
void setJetReflection(StkFloat coefficient)
Set the reflection coefficient for the jet delay (-1.0 - 1.0).
Definition Flute.h:58
void startBlowing(StkFloat amplitude, StkFloat rate)
Apply breath velocity to instrument with given amplitude and rate of increase.
void clear(void)
Reset and clear all internal state.
void stopBlowing(StkFloat rate)
Decrease breath velocity with given rate of decrease.
~Flute(void)
Class destructor.
void setEndReflection(StkFloat coefficient)
Set the reflection coefficient for the air column delay (-1.0 - 1.0).
Definition Flute.h:61
void controlChange(int number, StkFloat value)
Perform the control change specified by number and value (0.0 - 128.0).
Flute(StkFloat lowestFrequency)
Class constructor, taking the lowest desired playing frequency.
StkFloat tick(unsigned int channel=0)
Compute and return one output sample.
Definition Flute.h:116
void setJetDelay(StkFloat aRatio)
Set the length of the jet delay in terms of a ratio of jet delay to air column delay lengths.
void noteOff(StkFloat amplitude)
Stop a note with the given amplitude (speed of decay).
void setFrequency(StkFloat frequency)
Set instrument parameters for a particular frequency.
void noteOn(StkFloat frequency, StkFloat amplitude)
Start a note with the given frequency and amplitude.
STK instrument abstract base class.
Definition Instrmnt.h:20
STK jet table class.
Definition JetTable.h:24
STK noise generator.
Definition Noise.h:22
STK one-pole filter class.
Definition OnePole.h:21
STK one-pole, one-zero filter class.
Definition PoleZero.h:22
STK sinusoid oscillator class.
Definition SineWave.h:26
StkFloat tick(void)
Compute and return one output sample.
Definition SineWave.h:99
An STK class to handle vectorized audio data.
Definition Stk.h:279
unsigned int channels(void) const
Return the number of channels represented by the data.
Definition Stk.h:416
unsigned int frames(void) const
Return the number of sample frames represented by the data.
Definition Stk.h:419
The STK namespace.
Definition ADSR.h:6