From e1a199f0267439fe0ac118a5c903bd3e7c72ec00 Mon Sep 17 00:00:00 2001 From: Guenter Geiger Date: Fri, 1 Jul 2005 07:51:03 +0000 Subject: who knows what svn path=/trunk/externals/ggee/; revision=3274 --- gui/envgen.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) (limited to 'gui/envgen.c') 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; -- cgit v1.2.1