Home Information Classes Download Usage Mail List Requirements Links FAQ Tutorial
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. |