diff options
author | Florian Jung <flo@thinkpad.(none)> | 2010-12-29 16:55:25 +0100 |
---|---|---|
committer | Florian Jung <flo@thinkpad.(none)> | 2010-12-29 16:55:25 +0100 |
commit | 7113f02ae87482211aec5046f9ac46c3cc9ad017 (patch) | |
tree | b6484b45317e7e80567d9902cf94843d227ce30e /synth/envelope.h |
Initial commit
Diffstat (limited to 'synth/envelope.h')
-rw-r--r-- | synth/envelope.h | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/synth/envelope.h b/synth/envelope.h new file mode 100644 index 0000000..e0d3502 --- /dev/null +++ b/synth/envelope.h @@ -0,0 +1,65 @@ +#ifndef __ENVELOPE_H__ +#define __ENVELOPE_H__ + +#include <jack/jack.h> + +#include "programs.h" +#include "fixed.h" + + +class Envelope +{ + public: + Envelope(jack_nframes_t a, jack_nframes_t d, fixed_t s, jack_nframes_t r, bool h); + Envelope(env_settings_t s); + void release_key(); + void reattack(); + fixed_t get_level(); + bool still_active(); + void set_hold(bool h); + void set_attack(jack_nframes_t a); + void set_decay(jack_nframes_t d); + void set_sustain(fixed_t s); + void set_release(jack_nframes_t r); + void set_max(fixed_t m) + { + max=m; + if (max>ONE) max=ONE; + else if (max<0) max=0; + } + void set_ratefactor(double factor); + + bool get_hold() { return hold; } + jack_nframes_t get_attack() { return attack_orig; } + jack_nframes_t get_decay() { return decay_orig; } + fixed_t get_sustain() { return sustain; } + jack_nframes_t get_release() { return release_orig; } + + + private: + fixed_t max; + jack_nframes_t attack; + jack_nframes_t decay; + jack_nframes_t release; + jack_nframes_t attack_orig; + jack_nframes_t decay_orig; + jack_nframes_t release_orig; + jack_nframes_t rel_t; + fixed_t sustain; + fixed_t sustain_orig; + fixed_t level; + bool hold; + jack_nframes_t t; + fixed_t ratefactor; + + enum + { + ATTACK, + DECAY, + HOLD, + RELEASE, + DONE + } state; +}; + +#endif |