home *** CD-ROM | disk | FTP | other *** search
- /*******************************************/
- /* Master Class for 4 Operator FM Synth */
- /* by Perry R. Cook, 1995-96 */
- /* This instrument contains an 4 waves, */
- /* 4 envelopes, and various state vars. */
- /* */
- /* The basic Chowning/Stanford FM patent */
- /* expired April 1995, but there exist */
- /* follow-on patents, mostly assigned to */
- /* Yamaha. If you are of the type who */
- /* should worry about this (making money) */
- /* worry away. */
- /* */
- /*******************************************/
-
- #if !defined(__FM4Op_h)
- #define __FM4Op_h
-
- #include "Instrmnt.h"
- #include "ADSR.h"
- #include "RawLoop.h"
- #include "TwoZero.h"
-
- class FM4Op : public Instrmnt
- {
- protected:
- ADSR *adsr[4];
- RawLoop *waves[4];
- RawLoop *vibWave;
- TwoZero *twozero;
- MY_FLOAT baseFreq;
- MY_FLOAT ratios[4];
- MY_FLOAT gains[4];
- MY_FLOAT modDepth;
- MY_FLOAT control1;
- MY_FLOAT control2;
- MY_FLOAT __FM4Op_gains[100];
- MY_FLOAT __FM4Op_susLevels[16];
- MY_FLOAT __FM4Op_attTimes[32];
- public:
- FM4Op();
- ~FM4Op();
- void loadWaves(char* wave1, char* wave2, char* wave3, char* wave4);
- void clear();
- void setFreq(MY_FLOAT frequency);
- void setRatio(int whichOne, MY_FLOAT ratio);
- void setGain(int whichOne, MY_FLOAT gain);
- void keyOn();
- void keyOff();
- void noteOff(MY_FLOAT amp);
- /* There's no tick() method here, because that depends on the algorithm */
- void setModulationSpeed(MY_FLOAT mSpeed);
- void setModulationDepth(MY_FLOAT mDepth);
- void setControl1(MY_FLOAT cVal);
- void setControl2(MY_FLOAT cVal);
- virtual void controlChange(int number, MY_FLOAT value);
- };
-
- #endif
-