3
/*--------------- lhist ---------------*/
5
static t_class *lhist_class;
16
// int m_n_observations;
20
static void lhist_setHalfDecay(t_lhist *x, t_float halfDecayTime)
22
x->m_c_leak=(float)powf(.5,(1.0f/halfDecayTime));
23
x->m_leak=1.0f-x->m_c_leak;
26
static void lhist_perform_float(t_lhist *x, t_float f)
29
j=(int)(.5+(f-x->m_lo)*x->m_scale);
30
j=(j>0)?(j<x->m_nbins?j:x->m_nbins-1):0; // limit without IF
32
// x->m_n_observations++;
35
static void lhist_perform_list(t_lhist *x, t_symbol *s, int argc, t_atom *argv)
38
for (i = 0; i < argc; i++)
40
j=(int)(.5f+(atom_getfloat(&argv[i])-x->m_lo)*x->m_scale);
41
j=(j>0)?(j<x->m_nbins?j:x->m_nbins-1):0; // limit without IF
44
// x->m_n_observations+=argc;
47
static void lhist_leak(t_lhist *x)
59
static void lhist_bang(t_lhist *x)
65
ap = (t_atom *)getbytes(sizeof(t_atom)*n);
75
outlet_list(x->x_obj.ob_outlet,gensym("list"),n,ap);
79
static void lhist_relative(t_lhist *x)
87
ap = (t_atom *)getbytes(sizeof(t_atom)*n);
93
invn=1.0f/(1e-10f+sum);
99
SETFLOAT(app, (*f*invn));
103
outlet_list(x->x_obj.ob_outlet,gensym("list"),n,ap);
107
static void lhist_clear(t_lhist *x)
112
for (i=0;i<x->m_nbins;i++)
114
// x->m_n_observations=0;
117
static void lhist_set(t_lhist *x, t_float lo, t_float hi, t_float nbins)
122
post("lhist: number of bins is minimum 1...");
126
post("lhist: higher bound must be higher than lower bound...");
129
freebytes(x->m_lhist, x->m_nbins);
132
x->m_nbins=(int)nbins;
133
x->m_scale=(float)x->m_nbins/(hi-lo);
134
x->m_lhist = (float*)getbytes(sizeof(float)*x->m_nbins);
139
static void *lhist_new(t_float lo, t_float hi, t_float nbins, t_float decay)
141
t_lhist *x=(t_lhist *)pd_new(lhist_class);
142
outlet_new(&x->x_obj, gensym("list"));
143
lhist_setHalfDecay(x,decay);
146
lhist_set(x, lo, hi, nbins);
150
static void lhist_free(t_lhist *x)
152
freebytes(x->m_lhist, x->m_nbins);
155
void lhist_setup(void)
157
lhist_class = class_new(gensym("lhist"),
158
(t_newmethod)lhist_new, (t_method)lhist_free,
161
A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT,A_DEFFLOAT,0);
163
class_addmethod(lhist_class, (t_method)lhist_clear, gensym("clear"),0);
164
class_addmethod(lhist_class, (t_method)lhist_bang, gensym("absolute"),0);
165
class_addmethod(lhist_class, (t_method)lhist_relative, gensym("relative"),0);
166
class_addmethod(lhist_class, (t_method)lhist_leak, gensym("leak"),0);
167
class_addmethod(lhist_class, (t_method)lhist_setHalfDecay,
168
gensym("decay"), A_DEFFLOAT, NULL);
170
class_addlist(lhist_class, (t_method)lhist_perform_list);
171
class_addfloat(lhist_class, (t_method)lhist_perform_float);
172
class_addbang(lhist_class, (t_method)lhist_bang);