Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   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 "SineWave.h"
00033 #include "TwoZero.h"
00034 
00035 class FM : public Instrmnt
00036 {
00037  public:
00039 
00042   FM( unsigned int operators = 4 );
00043 
00045   virtual ~FM();
00046 
00048   void clear();
00049 
00051   void loadWaves(const char **filenames);
00052 
00054   virtual void setFrequency(StkFloat frequency);
00055 
00057   void setRatio(unsigned int waveIndex, StkFloat ratio);
00058 
00060   void setGain(unsigned int waveIndex, StkFloat gain);
00061 
00063   void setModulationSpeed(StkFloat mSpeed);
00064 
00066   void setModulationDepth(StkFloat mDepth);
00067 
00069   void setControl1(StkFloat cVal);
00070 
00072   void setControl2(StkFloat cVal);
00073 
00075   void keyOn();
00076 
00078   void keyOff();
00079 
00081   void noteOff(StkFloat amplitude);
00082 
00084   virtual void controlChange(int number, StkFloat value);
00085 
00086  protected:
00087 
00088   virtual StkFloat computeSample( void ) = 0;
00089 
00090   std::vector<ADSR *> adsr_; 
00091   std::vector<WaveLoop *> waves_;
00092   SineWave vibrato_;
00093   TwoZero  twozero_;
00094   unsigned int nOperators_;
00095   StkFloat baseFrequency_;
00096   std::vector<StkFloat> ratios_;
00097   std::vector<StkFloat> gains_;
00098   StkFloat modDepth_;
00099   StkFloat control1_;
00100   StkFloat control2_;
00101   StkFloat fmGains_[100];
00102   StkFloat fmSusLevels_[16];
00103   StkFloat fmAttTimes_[32];
00104 
00105 };
00106 
00107 #endif

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