Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   Tutorial


FM.h

00001 /***************************************************/
00024 /***************************************************/
00025 
00026 #ifndef STK_FM_H
00027 #define STK_FM_H
00028 
00029 #include "Instrmnt.h"
00030 #include "ADSR.h"
00031 #include "WaveLoop.h"
00032 #include "TwoZero.h"
00033 
00034 class FM : public Instrmnt
00035 {
00036  public:
00038 
00041   FM( unsigned int operators = 4 );
00042 
00044   virtual ~FM();
00045 
00047   void clear();
00048 
00050   void loadWaves(const char **filenames);
00051 
00053   virtual void setFrequency(StkFloat frequency);
00054 
00056   void setRatio(unsigned int waveIndex, StkFloat ratio);
00057 
00059   void setGain(unsigned int waveIndex, StkFloat gain);
00060 
00062   void setModulationSpeed(StkFloat mSpeed);
00063 
00065   void setModulationDepth(StkFloat mDepth);
00066 
00068   void setControl1(StkFloat cVal);
00069 
00071   void setControl2(StkFloat cVal);
00072 
00074   void keyOn();
00075 
00077   void keyOff();
00078 
00080   void noteOff(StkFloat amplitude);
00081 
00083   virtual StkFloat tick() = 0;
00084 
00086   virtual StkFloat *tick(StkFloat *vector, unsigned int vectorSize) = 0;
00087 
00089 
00095   virtual StkFrames& tick( StkFrames& frames, unsigned int channel = 1 ) = 0;
00096 
00098   virtual void controlChange(int number, StkFloat value);
00099 
00100  protected:  
00101   std::vector<ADSR *> adsr_; 
00102   std::vector<WaveLoop *> waves_;
00103   WaveLoop *vibrato_;
00104   TwoZero  twozero_;
00105   unsigned int nOperators_;
00106   StkFloat baseFrequency_;
00107   std::vector<StkFloat> ratios_;
00108   std::vector<StkFloat> gains_;
00109   StkFloat modDepth_;
00110   StkFloat control1_;
00111   StkFloat control2_;
00112   StkFloat fmGains_[100];
00113   StkFloat fmSusLevels_[16];
00114   StkFloat fmAttTimes_[32];
00115 
00116 };
00117 
00118 #endif

The Synthesis ToolKit in C++ (STK)
©1995-2004 Perry R. Cook and Gary P. Scavone. All Rights Reserved.