3
/*--------------- vlrange -----------------------*/
4
/* leaky range of each element in a list */
5
/* arguments: [halfdecay] */
7
static t_class *vlrange_class;
9
typedef struct _vlrange
20
static void vlrange_perform(t_vlrange *x, t_symbol *s, int argc, t_atom *argv)
35
freebytes(x->m_min,x->m_n);
36
freebytes(x->m_max,x->m_n);
38
x->m_min=(float*)getbytes(argc*sizeof(float));
39
x->m_max=(float*)getbytes(argc*sizeof(float));
50
ap = (t_atom *)getbytes(sizeof(t_atom)*argc);
52
for (i = 0; i < argc; i++)
54
float f=atom_getfloat(argv++);
55
*fmax =(f > *fmax ) ? f : *fmax *m_c_leak + f*m_leak;
56
*fmin =(f < *fmin ) ? f : *fmin *m_c_leak + f*m_leak;
57
SETFLOAT(app, *fmax-*fmin);
62
outlet_list(x->x_obj.ob_outlet,gensym("list"),argc,ap);
66
static void vlrange_setHalfDecay(t_vlrange *x, t_floatarg halfDecayTime)
68
x->m_c_leak=(float)powf(.5,(1.0f/halfDecayTime));
69
x->m_leak=1.0f-x->m_c_leak;
72
static void *vlrange_new(t_float halfDecayTime)
74
t_vlrange *x=(t_vlrange *)pd_new(vlrange_class);
75
outlet_new(&x->x_obj, gensym("list"));
76
vlrange_setHalfDecay(x, halfDecayTime);
83
static void vlrange_free(t_vlrange *x)
85
freebytes(x->m_max,x->m_n);
86
freebytes(x->m_min,x->m_n);
89
void vlrange_setup(void)
91
vlrange_class = class_new(gensym("vlrange"),
92
(t_newmethod)vlrange_new, (t_method)vlrange_free,
96
class_addmethod(vlrange_class, (t_method)vlrange_setHalfDecay,
97
gensym("decay"), A_DEFFLOAT, NULL);
98
class_addlist(vlrange_class, (t_method)vlrange_perform);