3
/*--------------- lhisti ---------------*/
4
// ignores samples outside bins
6
static t_class *lhisti_class;
17
// int m_n_observations;
21
static void lhisti_setHalfDecay(t_lhisti *x, t_float halfDecayTime)
23
x->m_c_leak=(float)powf(.5,(1.0f/halfDecayTime));
24
x->m_leak=1.0f-x->m_c_leak;
27
static void lhisti_perform_float(t_lhisti *x, t_float f)
30
j=(int)(.5+(f-x->m_lo)*x->m_scale);
31
if ((j>=0)&&(j<x->m_nbins))
35
static void lhisti_perform_list(t_lhisti *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
if ((j>=0)&&(j<x->m_nbins))
44
// x->m_n_observations+=argc;
47
static void lhisti_leak(t_lhisti *x)
59
static void lhisti_bang(t_lhisti *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 lhisti_relative(t_lhisti *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 lhisti_clear(t_lhisti *x)
112
for (i=0;i<x->m_nbins;i++)
114
// x->m_n_observations=0;
117
static void lhisti_set(t_lhisti *x, t_float lo, t_float hi, t_float nbins)
122
post("lhisti: number of bins is minimum 1...");
126
post("lhisti: higher bound must be higher than lower bound...");
129
freebytes(x->m_lhisti, x->m_nbins);
132
x->m_nbins=(int)nbins;
133
x->m_scale=(float)x->m_nbins/(hi-lo);
134
x->m_lhisti = (float*)getbytes(sizeof(float)*x->m_nbins);
139
static void *lhisti_new(t_float lo, t_float hi, t_float nbins, t_float decay)
141
t_lhisti *x=(t_lhisti *)pd_new(lhisti_class);
142
outlet_new(&x->x_obj, gensym("list"));
143
lhisti_setHalfDecay(x,decay);
146
lhisti_set(x, lo, hi, nbins);
150
static void lhisti_free(t_lhisti *x)
152
freebytes(x->m_lhisti, x->m_nbins);
155
void lhisti_setup(void)
157
lhisti_class = class_new(gensym("lhisti"),
158
(t_newmethod)lhisti_new, (t_method)lhisti_free,
161
A_DEFFLOAT, A_DEFFLOAT, A_DEFFLOAT,A_DEFFLOAT,0);
163
class_addmethod(lhisti_class, (t_method)lhisti_clear, gensym("clear"),0);
164
class_addmethod(lhisti_class, (t_method)lhisti_bang, gensym("absolute"),0);
165
class_addmethod(lhisti_class, (t_method)lhisti_relative, gensym("relative"),0);
166
class_addmethod(lhisti_class, (t_method)lhisti_leak, gensym("leak"),0);
167
class_addmethod(lhisti_class, (t_method)lhisti_setHalfDecay,
168
gensym("decay"), A_DEFFLOAT, NULL);
170
class_addlist(lhisti_class, (t_method)lhisti_perform_list);
171
class_addfloat(lhisti_class, (t_method)lhisti_perform_float);
172
class_addbang(lhisti_class, (t_method)lhisti_bang);