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