home *** CD-ROM | disk | FTP | other *** search
- /******************************************/
- /* WaveGuide Flute ala Karjalainen, */
- /* Smith, Waryznyk, etc. */
- /* with polynomial Jet ala Cook */
- /* by Perry Cook, 1995-96 */
- /* */
- /* This is a waveguide model, and thus */
- /* relates to various Stanford Univ. */
- /* and possibly Yamaha and other patents.*/
- /* */
- /* Controls: CONTROL1 = jetDelay */
- /* CONTROL2 = noiseGain */
- /* CONTROL3 = vibFreq */
- /* MOD_WHEEL= vibAmt */
- /******************************************/
-
- #if !defined(__Flute_h)
- #define __Flute_h
-
- #include "Instrmnt.h"
- #include "JetTabl.h"
- #include "DLineL.h"
- #include "OnePole.h"
- #include "DCBlock.h"
- #include "Noise.h"
- #include "ADSR.h"
- #include "RawLoop.h"
-
- class Flute : public Instrmnt
- {
- protected:
- DLineL *jetDelay;
- DLineL *boreDelay;
- JetTabl *jetTable;
- OnePole *filter;
- DCBlock *dcBlock;
- Noise *noise;
- ADSR *adsr;
- RawLoop *vibr;
- MY_FLOAT lastFreq;
- MY_FLOAT maxPressure;
- MY_FLOAT jetRefl;
- MY_FLOAT endRefl;
- MY_FLOAT noiseGain;
- MY_FLOAT vibrGain;
- MY_FLOAT outputGain;
- MY_FLOAT jetRatio;
- public:
- Flute(MY_FLOAT lowestFreq);
- ~Flute();
- void clear();
- void startBlowing(MY_FLOAT amplitude,MY_FLOAT rate);
- void stopBlowing(MY_FLOAT rate);
- virtual void noteOn(MY_FLOAT freq, MY_FLOAT amp);
- virtual void noteOff(MY_FLOAT amp);
- void setJetRefl(MY_FLOAT refl);
- void setEndRefl(MY_FLOAT refl);
- virtual void setFreq(MY_FLOAT frequency);
- virtual MY_FLOAT tick();
- virtual void controlChange(int number, MY_FLOAT value);
- void setJetDelay(MY_FLOAT aLength);
- };
-
- #endif
-