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--2017 Perry R. Cook and Gary P. Scavone. All Rights Reserved.