Home Information Classes Download Usage Mail List Requirements Links FAQ Tutorial
00001 #ifndef STK_FM_H 00002 #define STK_FM_H 00003 00004 #include "Instrmnt.h" 00005 #include "ADSR.h" 00006 #include "FileLoop.h" 00007 #include "SineWave.h" 00008 #include "TwoZero.h" 00009 00010 namespace stk { 00011 00012 /***************************************************/ 00035 /***************************************************/ 00036 00037 class FM : public Instrmnt 00038 { 00039 public: 00041 00044 FM( unsigned int operators = 4 ); 00045 00047 virtual ~FM( void ); 00048 00050 void clear( void ); 00051 00053 void loadWaves( const char **filenames ); 00054 00056 virtual void setFrequency( StkFloat frequency ); 00057 00059 void setRatio( unsigned int waveIndex, StkFloat ratio ); 00060 00062 void setGain( unsigned int waveIndex, StkFloat gain ); 00063 00065 void setModulationSpeed( StkFloat mSpeed ) { vibrato_.setFrequency( mSpeed ); }; 00066 00068 void setModulationDepth( StkFloat mDepth ) { modDepth_ = mDepth; }; 00069 00071 void setControl1( StkFloat cVal ) { control1_ = cVal * 2.0; }; 00072 00074 void setControl2( StkFloat cVal ) { control2_ = cVal * 2.0; }; 00075 00077 void keyOn( void ); 00078 00080 void keyOff( void ); 00081 00083 void noteOff( StkFloat amplitude ); 00084 00086 virtual void controlChange( int number, StkFloat value ); 00087 00089 virtual StkFloat tick( unsigned int ) = 0; 00090 00091 protected: 00092 00093 std::vector<ADSR *> adsr_; 00094 std::vector<FileLoop *> waves_; 00095 SineWave vibrato_; 00096 TwoZero twozero_; 00097 unsigned int nOperators_; 00098 StkFloat baseFrequency_; 00099 std::vector<StkFloat> ratios_; 00100 std::vector<StkFloat> gains_; 00101 StkFloat modDepth_; 00102 StkFloat control1_; 00103 StkFloat control2_; 00104 StkFloat fmGains_[100]; 00105 StkFloat fmSusLevels_[16]; 00106 StkFloat fmAttTimes_[32]; 00107 00108 }; 00109 00110 } // stk namespace 00111 00112 #endif
The Synthesis ToolKit in C++ (STK) |
©1995-2010 Perry R. Cook and Gary P. Scavone. All Rights Reserved. |