00001
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059 #ifndef CSHELLSYNTH_ENVELOPE_GENERATOR_H
00060 #define CSHELLSYNTH_ENVELOPE_GENERATOR_H 1
00061
00062 #include <jack/jack.h>
00063 #include <stdbool.h>
00064 #include <cshellsynth/atomic-types.h>
00065 #include <cshellsynth/jclient.h>
00066
00070 enum cs_envg_state {
00071 ATTACK,
00072 DECAY,
00073 SUSTAIN,
00074 RELEASE,
00075 FINISHED
00076 };
00077
00085 typedef struct cs_envg_struct {
00086 jack_client_t *client;
00087 jack_port_t *ctl_port;
00088 jack_port_t *out_port;
00089 atomic_float_t attack_t;
00090 atomic_float_t attack_a;
00091 atomic_float_t decay_t;
00092 atomic_float_t sustain_a;
00093 atomic_float_t release_t;
00094 atomic_float_t release_a;
00095 atomic_t linear;
00096 bool upwards;
00097 enum cs_envg_state state;
00098 double last_a;
00099 bool release;
00100 } cs_envg_t;
00101
00107 #define cs_envg_destroy(cs_envg) jclient_destroy((jclient_t *) (cs_envg))
00108
00114 int cs_envg_init(cs_envg_t *self, const char *client_name, jack_options_t flags, char *server_name);
00115
00121 void cs_envg_set_attack_t(cs_envg_t *self, float attack_t);
00122
00128 void cs_envg_set_attack_a(cs_envg_t *self, float attack_a);
00129
00135 void cs_envg_set_decay_t(cs_envg_t *self, float decay_t);
00136
00142 void cs_envg_set_sustain_a(cs_envg_t *self, float sustain_a);
00143
00149 void cs_envg_set_release_t(cs_envg_t *self, float release_t);
00150
00156 void cs_envg_set_release_a(cs_envg_t *self, float release_a);
00157
00165 void cs_envg_set_linear(cs_envg_t *self, int linear);
00166
00167 #endif