aboutsummaryrefslogtreecommitdiff
path: root/gui/envgen.c
diff options
context:
space:
mode:
authorGuenter Geiger <ggeiger@users.sourceforge.net>2005-07-01 07:51:03 +0000
committerGuenter Geiger <ggeiger@users.sourceforge.net>2005-07-01 07:51:03 +0000
commite1a199f0267439fe0ac118a5c903bd3e7c72ec00 (patch)
tree05987843da83cbe49056232f36f4f5fce26bb9dc /gui/envgen.c
parent9e5b1dbdc05765ffba00e61bb5a0518c3cda9336 (diff)
who knows what
svn path=/trunk/externals/ggee/; revision=3274
Diffstat (limited to 'gui/envgen.c')
-rwxr-xr-xgui/envgen.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/gui/envgen.c b/gui/envgen.c
index 3886572..bc33708 100755
--- a/gui/envgen.c
+++ b/gui/envgen.c
@@ -7,7 +7,7 @@
#define NONE 0
#define ATTACK 1
-#define SUSTAIN 3
+#define SUSTAIN -1
#define STATES 100
#include "envgen.h"
@@ -187,6 +187,17 @@ void envgen_bang(t_envgen *x)
clock_delay(x->x_clock,x->duration[x->x_state]);
}
+void envgen_release(t_envgen* x) {
+ t_atom a[2];
+ float del = x->duration[x->x_state] - x->duration[x->x_state-1];
+ if (x->x_state <= x->sustain_state) {
+ x->x_state = x->sustain_state+1; /* skip sustain state */
+ clock_delay(x->x_clock,del);
+ SETFLOAT(a,x->finalvalues[x->x_state]*(x->max-x->min));
+ SETFLOAT(a+1,del);
+ OUT_LIST(x,2,a);
+ }
+}
static void envgen_sustain(t_envgen *x, t_floatarg f)
{
@@ -199,15 +210,15 @@ static void envgen_tick(t_envgen* x)
{
t_atom a[2];
x->x_state++;
- if (x->x_state <= x->last_state) {
+ if (x->x_state <= x->last_state && x->x_state != x->sustain_state) {
float del = x->duration[x->x_state] - x->duration[x->x_state-1];
clock_delay(x->x_clock,del);
SETFLOAT(a,x->finalvalues[x->x_state]*(x->max-x->min));
SETFLOAT(a+1,del);
OUT_LIST(x,2,a);
}
- else
- clock_unset(x->x_clock);
+// else
+// clock_unset(x->x_clock);
}
static void envgen_freeze(t_envgen* x, t_floatarg f)
@@ -321,7 +332,8 @@ void envgen_setup(void)
class_addmethod(envgen_class,(t_method)envgen_freeze,gensym("freeze"),A_FLOAT,NULL);
class_addmethod(envgen_class,(t_method)envgen_setresize,gensym("resize"),A_FLOAT,A_NULL);
- envgen_widgetbehavior.w_getrectfn = envgen_getrect;
+ class_addmethod(envgen_class,(t_method)envgen_release,gensym("release"),A_NULL);
+ envgen_widgetbehavior.w_getrectfn = envgen_getrect;
envgen_widgetbehavior.w_displacefn = envgen_displace;
envgen_widgetbehavior.w_selectfn = envgen_select;
envgen_widgetbehavior.w_activatefn = envgen_activate;