Home   Information   Classes   Download   Usage   Mail List   Requirements   Links   FAQ   Tutorial


FM.h
1 #ifndef STK_FM_H
2 #define STK_FM_H
3 
4 #include "Instrmnt.h"
5 #include "ADSR.h"
6 #include "FileLoop.h"
7 #include "SineWave.h"
8 #include "TwoZero.h"
9 
10 namespace stk {
11 
12 /***************************************************/
35 /***************************************************/
36 
37 class FM : public Instrmnt
38 {
39  public:
41 
44  FM( unsigned int operators = 4 );
45 
47  virtual ~FM( void );
48 
50  void loadWaves( const char **filenames );
51 
53  virtual void setFrequency( StkFloat frequency );
54 
56  void setRatio( unsigned int waveIndex, StkFloat ratio );
57 
59  void setGain( unsigned int waveIndex, StkFloat gain );
60 
62  void setModulationSpeed( StkFloat mSpeed ) { vibrato_.setFrequency( mSpeed ); };
63 
65  void setModulationDepth( StkFloat mDepth ) { modDepth_ = mDepth; };
66 
68  void setControl1( StkFloat cVal ) { control1_ = cVal * 2.0; };
69 
71  void setControl2( StkFloat cVal ) { control2_ = cVal * 2.0; };
72 
74  void keyOn( void );
75 
77  void keyOff( void );
78 
80  void noteOff( StkFloat amplitude );
81 
83  virtual void controlChange( int number, StkFloat value );
84 
86  virtual StkFloat tick( unsigned int ) = 0;
87 
89 
96  virtual StkFrames& tick( StkFrames& frames, unsigned int channel = 0 ) = 0;
97 
98  protected:
99 
100  std::vector<ADSR *> adsr_;
101  std::vector<FileLoop *> waves_;
102  SineWave vibrato_;
103  TwoZero twozero_;
104  unsigned int nOperators_;
105  StkFloat baseFrequency_;
106  std::vector<StkFloat> ratios_;
107  std::vector<StkFloat> gains_;
108  StkFloat modDepth_;
109  StkFloat control1_;
110  StkFloat control2_;
111  StkFloat fmGains_[100];
112  StkFloat fmSusLevels_[16];
113  StkFloat fmAttTimes_[32];
114 
115 };
116 
117 } // stk namespace
118 
119 #endif

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