Update of /cvsroot/pure-data/externals/iemlib/src/iemlib2
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8592/iemlib/src/iemlib2
Modified Files:
iemlib2.c makefile_linux makefile_win
Added Files:
LFO_noise~.c fade~.c iem_blocksize~.c iem_samplerate~.c m2f~.c
Log Message:
changed sig* to *_tilde
--- NEW FILE: LFO_noise~.c ---
/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
iemlib2 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2005 */
#include "m_pd.h"
#include "iemlib.h"
/* -------------------- LFO_noise~ --------------------- */
/* ---- outputs a 2 point interpolated white noise ----- */
/* -- with lower cutoff frequency than 0.5 samplerate -- */
static t_class *LFO_noise_tilde_class;
typedef struct _LFO_noise_tilde
{
t_object x_obj;
double x_range;
double x_rcp_range;
unsigned int x_state;
t_float x_fact;
t_float x_incr;
t_float x_y1;
t_float x_y2;
t_float x_phase;
} t_LFO_noise_tilde;
static int LFO_noise_makeseed(void)
{
static unsigned int LFO_noise_nextseed = 1489853723;
LFO_noise_nextseed = LFO_noise_nextseed * 435898247 + 938284287;
return(LFO_noise_nextseed & 0x7fffffff);
}
static float LFO_noise_new_rand(t_LFO_noise_tilde *x)
{
unsigned int state = x->x_state;
double new_val, range = x->x_range;
x->x_state = state = state * 472940017 + 832416023;
new_val = range * ((double)state) * (1./4294967296.);
if(new_val >= range)
new_val = range-1;
new_val -= 32767.0;
return(new_val*(1.0/32767.0));
}
static void *LFO_noise_new(t_float freq)
{
t_LFO_noise_tilde *x = (t_LFO_noise_tilde *)pd_new(LFO_noise_tilde_class);
x->x_range = 65535.0;
x->x_rcp_range = (double)x->x_range * (1.0/4294967296.0);
x->x_state = LFO_noise_makeseed();
x->x_fact = 2.0f / 44100.0f;
x->x_incr = freq * x->x_fact;
if(x->x_incr < 0.0f)
x->x_incr = 0.0f;
else if(x->x_incr > 0.1f)
x->x_incr = 0.1f;
x->x_y1 = LFO_noise_new_rand(x);
x->x_y2 = LFO_noise_new_rand(x);
x->x_phase = 0.0f;
outlet_new(&x->x_obj, gensym("signal"));
return (x);
}
static t_int *LFO_noise_perform(t_int *w)
{
t_float *out = (t_float *)(w[1]);
t_LFO_noise_tilde *x = (t_LFO_noise_tilde *)(w[2]);
int n = (int)(w[3]);
t_float phase = x->x_phase;
t_float x_y1 = x->x_y1;
t_float x_y2 = x->x_y2;
t_float incr = x->x_incr;
while(n--)
{
if(phase > 1.0f)
{
x_y1 = x_y2;
x_y2 = LFO_noise_new_rand(x);
phase -= 1.0;
}
*out++ = (x_y2 - x_y1) * phase + x_y1;
phase += incr;
}
x->x_phase = phase;
x->x_y1 = x_y1;
x->x_y2 = x_y2;
return (w+4);
}
static void LFO_noise_float(t_LFO_noise_tilde *x, t_floatarg freq)
{
x->x_incr = freq * x->x_fact;
if(x->x_incr < 0.0f)
x->x_incr = 0.0f;
else if(x->x_incr > 0.1f)
x->x_incr = 0.1f;
}
static void LFO_noise_dsp(t_LFO_noise_tilde *x, t_signal **sp)
{
x->x_fact = 2.0f / sp[0]->s_sr;
dsp_add(LFO_noise_perform, 3, sp[0]->s_vec, x, sp[0]->s_n);
}
void LFO_noise_tilde_setup(void)
{
LFO_noise_tilde_class = class_new(gensym("LFO_noise~"),
(t_newmethod)LFO_noise_new, 0,
sizeof(t_LFO_noise_tilde), 0, A_DEFFLOAT, 0);
class_addmethod(LFO_noise_tilde_class, (t_method)LFO_noise_dsp,
gensym("dsp"), 0);
class_addfloat(LFO_noise_tilde_class, (t_method)LFO_noise_float);
class_sethelpsymbol(LFO_noise_tilde_class, gensym("iemhelp/help-LFO_noise~"));
}
Index: makefile_linux
===================================================================
RCS file: /cvsroot/pure-data/externals/iemlib/src/iemlib2/makefile_linux,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** makefile_linux 7 Nov 2006 17:11:40 -0000 1.1
--- makefile_linux 8 Nov 2006 10:48:53 -0000 1.2
***************
*** 22,28 ****
--- 22,30 ----
dollarg.c \
exp_inc.c \
+ fade~.c \
float24.c \
iem_anything.c \
iem_append.c \
+ iem_blocksize~.c \
iem_i_route.c \
iem_pbank_csv.c \
***************
*** 30,37 ****
--- 32,42 ----
iem_receive.c \
iem_route.c \
+ iem_samplerate~.c \
iem_sel_any.c \
iem_send.c \
init.c \
+ LFO_noise~.c \
list2send.c \
+ m2f~.c \
mergefilename.c \
modulo_counter.c \
***************
*** 43,51 ****
receive2list.c \
round_zero.c \
- sigfade.c \
- sigiem_blocksize.c \
- sigiem_samplerate.c \
- sigLFO_noise.c \
- sigm2f.c \
speedlim.c \
splitfilename.c \
--- 48,51 ----
Index: iemlib2.c
===================================================================
RCS file: /cvsroot/pure-data/externals/iemlib/src/iemlib2/iemlib2.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** iemlib2.c 7 Nov 2006 17:11:40 -0000 1.5
--- iemlib2.c 8 Nov 2006 10:48:53 -0000 1.6
***************
*** 21,27 ****
--- 21,29 ----
void dollarg_setup(void);
void exp_inc_setup(void);
+ void fade_tilde_setup(void);
void float24_setup(void);
void iem_anything_setup(void);
void iem_append_setup(void);
+ void iem_blocksize_tilde_setup(void);
void iem_i_route_setup(void);
void iem_pbank_csv_setup(void);
***************
*** 29,36 ****
--- 31,41 ----
void iem_receive_setup(void);
void iem_route_setup(void);
+ void iem_samplerate_tilde_setup(void);
void iem_sel_any_setup(void);
void iem_send_setup(void);
void init_setup(void);
+ void LFO_noise_tilde_setup(void);
void list2send_setup(void);
+ void m2f_tilde_setup(void);
void mergefilename_setup(void);
void modulo_counter_setup(void);
***************
*** 42,50 ****
void receive2list_setup(void);
void round_zero_setup(void);
- void sigfade_setup(void);
- void sigiem_blocksize_setup(void);
- void sigiem_samplerate_setup(void);
- void sigLFO_noise_setup(void);
- void sigm2f_setup(void);
void speedlim_setup(void);
void splitfilename_setup(void);
--- 47,50 ----
***************
*** 65,71 ****
--- 65,73 ----
dollarg_setup();
exp_inc_setup();
+ fade_tilde_setup();
float24_setup();
iem_anything_setup();
iem_append_setup();
+ iem_blocksize_tilde_setup();
iem_i_route_setup();
iem_pbank_csv_setup();
***************
*** 73,80 ****
--- 75,85 ----
iem_receive_setup();
iem_route_setup();
+ iem_samplerate_tilde_setup();
iem_sel_any_setup();
iem_send_setup();
init_setup();
+ LFO_noise_tilde_setup();
list2send_setup();
+ m2f_tilde_setup();
mergefilename_setup();
modulo_counter_setup();
***************
*** 86,94 ****
receive2list_setup();
round_zero_setup();
- sigfade_setup();
- sigiem_blocksize_setup();
- sigiem_samplerate_setup();
- sigLFO_noise_setup();
- sigm2f_setup();
speedlim_setup();
splitfilename_setup();
--- 91,94 ----
--- NEW FILE: fade~.c ---
/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
iemlib2 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2005 */
#include "m_pd.h"
#include "iemlib.h"
#include <math.h>
/* ------------------------- fade~ ----------------------------- */
/* --- signal lookup tabel object with input range of 0 to 1 --- */
/* ---- converts a linear signal ramp to the half of a : ------ */
/* -- sine-wave, hanning-wave, squareroot-wave or mixes of it -- */
t_float *iem_fade_tilde_table_lin=(t_float *)0L;
t_float *iem_fade_tilde_table_linsqrt=(t_float *)0L;
t_float *iem_fade_tilde_table_sqrt=(t_float *)0L;
t_float *iem_fade_tilde_table_sin=(t_float *)0L;
t_float *iem_fade_tilde_table_sinhann=(t_float *)0L;
t_float *iem_fade_tilde_table_hann=(t_float *)0L;
static t_class *fade_tilde_class;
typedef struct _fade
{
t_object x_obj;
t_float *x_table;
t_float x_f;
} t_fade_tilde;
static void fade_set(t_fade_tilde *x, t_symbol *s)
{
if(s == gensym("_lin"))
x->x_table = iem_fade_tilde_table_lin;
else if(s == gensym("_linsqrt"))
x->x_table = iem_fade_tilde_table_linsqrt;
else if(s == gensym("_sqrt"))
x->x_table = iem_fade_tilde_table_sqrt;
else if(s == gensym("_sin"))
x->x_table = iem_fade_tilde_table_sin;
else if(s == gensym("_sinhann"))
x->x_table = iem_fade_tilde_table_sinhann;
else if(s == gensym("_hann"))
x->x_table = iem_fade_tilde_table_hann;
}
static void *fade_new(t_symbol *s)
{
t_fade_tilde *x = (t_fade_tilde *)pd_new(fade_tilde_class);
outlet_new(&x->x_obj, gensym("signal"));
x->x_f = 0;
x->x_table = iem_fade_tilde_table_lin;
fade_set(x, s);
return (x);
}
static t_int *fade_perform(t_int *w)
{
t_float *in = (t_float *)(w[1]);
t_float *out = (t_float *)(w[2]);
t_fade_tilde *x = (t_fade_tilde *)(w[3]);
int n = (int)(w[4]);
t_float *tab = x->x_table, *addr, f1, f2, frac;
double dphase;
int normhipart;
union tabfudge tf;
tf.tf_d = UNITBIT32;
normhipart = tf.tf_i[HIOFFSET];
#if 0 /* this is the readable version of the code. */
while (n--)
{
dphase = (double)(*in++ * (t_float)(COSTABSIZE) * 0.99999) + UNITBIT32;
tf.tf_d = dphase;
addr = tab + (tf.tf_i[HIOFFSET] & (COSTABSIZE-1));
tf.tf_i[HIOFFSET] = normhipart;
frac = tf.tf_d - UNITBIT32;
f1 = addr[0];
f2 = addr[1];
*out++ = f1 + frac * (f2 - f1);
}
#endif
#if 1 /* this is the same, unwrapped by hand. */
dphase = (double)(*in++ * (t_float)(COSTABSIZE) * 0.99999) + UNITBIT32;
tf.tf_d = dphase;
addr = tab + (tf.tf_i[HIOFFSET] & (COSTABSIZE-1));
tf.tf_i[HIOFFSET] = normhipart;
while (--n)
{
dphase = (double)(*in++ * (t_float)(COSTABSIZE) * 0.99999) + UNITBIT32;
frac = tf.tf_d - UNITBIT32;
tf.tf_d = dphase;
f1 = addr[0];
f2 = addr[1];
addr = tab + (tf.tf_i[HIOFFSET] & (COSTABSIZE-1));
*out++ = f1 + frac * (f2 - f1);
tf.tf_i[HIOFFSET] = normhipart;
}
frac = tf.tf_d - UNITBIT32;
f1 = addr[0];
f2 = addr[1];
*out++ = f1 + frac * (f2 - f1);
#endif
return (w+5);
}
static void fade_dsp(t_fade_tilde *x, t_signal **sp)
{
dsp_add(fade_perform, 4, sp[0]->s_vec, sp[1]->s_vec, x, sp[0]->s_n);
}
static void fade_maketable(void)
{
int i;
t_float *fp, phase, fff,phsinc = 0.5*3.141592653 / ((t_float)COSTABSIZE*0.99999);
union tabfudge tf;
if(!iem_fade_tilde_table_sin)
{
iem_fade_tilde_table_sin = (t_float *)getbytes(sizeof(t_float) * (COSTABSIZE+1));
for(i=COSTABSIZE+1, fp=iem_fade_tilde_table_sin, phase=0; i--; fp++, phase+=phsinc)
*fp = sin(phase);
}
if(!iem_fade_tilde_table_sinhann)
{
iem_fade_tilde_table_sinhann = (t_float *)getbytes(sizeof(t_float) * (COSTABSIZE+1));
for(i=COSTABSIZE+1, fp=iem_fade_tilde_table_sinhann, phase=0; i--; fp++, phase+=phsinc)
{
fff = sin(phase);
*fp = fff*sqrt(fff);
}
}
if(!iem_fade_tilde_table_hann)
{
iem_fade_tilde_table_hann = (t_float *)getbytes(sizeof(t_float) * (COSTABSIZE+1));
for(i=COSTABSIZE+1, fp=iem_fade_tilde_table_hann, phase=0; i--; fp++, phase+=phsinc)
{
fff = sin(phase);
*fp = fff*fff;
}
}
phsinc = 1.0 / ((t_float)COSTABSIZE*0.99999);
if(!iem_fade_tilde_table_lin)
{
iem_fade_tilde_table_lin = (t_float *)getbytes(sizeof(t_float) * (COSTABSIZE+1));
for(i=COSTABSIZE+1, fp=iem_fade_tilde_table_lin, phase=0; i--; fp++, phase+=phsinc)
*fp = phase;
}
if(!iem_fade_tilde_table_linsqrt)
{
iem_fade_tilde_table_linsqrt = (t_float *)getbytes(sizeof(t_float) * (COSTABSIZE+1));
for(i=COSTABSIZE+1, fp=iem_fade_tilde_table_linsqrt, phase=0; i--; fp++, phase+=phsinc)
*fp = pow(phase, 0.75);
}
if(!iem_fade_tilde_table_sqrt)
{
iem_fade_tilde_table_sqrt = (t_float *)getbytes(sizeof(t_float) * (COSTABSIZE+1));
for(i=COSTABSIZE+1, fp=iem_fade_tilde_table_sqrt, phase=0; i--; fp++, phase+=phsinc)
*fp = sqrt(phase);
}
tf.tf_d = UNITBIT32 + 0.5;
if((unsigned)tf.tf_i[LOWOFFSET] != 0x80000000)
bug("fade~: unexpected machine alignment");
}
void fade_tilde_setup(void)
{
fade_tilde_class = class_new(gensym("fade~"), (t_newmethod)fade_new, 0,
sizeof(t_fade_tilde), 0, A_DEFSYM, 0);
CLASS_MAINSIGNALIN(fade_tilde_class, t_fade_tilde, x_f);
class_addmethod(fade_tilde_class, (t_method)fade_dsp, gensym("dsp"), 0);
class_addmethod(fade_tilde_class, (t_method)fade_set, gensym("set"), A_DEFSYM, 0);
class_sethelpsymbol(fade_tilde_class, gensym("iemhelp/help-fade~"));
fade_maketable();
}
--- NEW FILE: iem_samplerate~.c ---
/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
iemlib2 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2005 */
#include "m_pd.h"
#include "iemlib.h"
/* --------------- iem_samplerate~ ----------------- */
/* -- outputs the current samplerate of a window --- */
static t_class *iem_samplerate_tilde_class;
typedef struct _iem_samplerate
{
t_object x_obj;
t_float x_samplerate;
t_clock *x_clock;
t_float x_f;
} t_iem_samplerate_tilde;
static void iem_samplerate_out(t_iem_samplerate_tilde *x)
{
outlet_float(x->x_obj.ob_outlet, x->x_samplerate);
}
static void iem_samplerate_free(t_iem_samplerate_tilde *x)
{
clock_free(x->x_clock);
}
static void *iem_samplerate_new(t_symbol *s)
{
t_iem_samplerate_tilde *x = (t_iem_samplerate_tilde *)pd_new(iem_samplerate_tilde_class);
x->x_clock = clock_new(x, (t_method)iem_samplerate_out);
outlet_new(&x->x_obj, &s_float);
x->x_samplerate = 44100.0f;
x->x_f = 0.0f;
return (x);
}
static void iem_samplerate_dsp(t_iem_samplerate_tilde *x, t_signal **sp)
{
x->x_samplerate = (t_float)(sp[0]->s_sr);
clock_delay(x->x_clock, 0.0f);
}
void iem_samplerate_tilde_setup(void)
{
iem_samplerate_tilde_class = class_new(gensym("iem_samplerate~"), (t_newmethod)iem_samplerate_new,
(t_method)iem_samplerate_free, sizeof(t_iem_samplerate_tilde), 0, 0);
CLASS_MAINSIGNALIN(iem_samplerate_tilde_class, t_iem_samplerate_tilde, x_f);
class_addmethod(iem_samplerate_tilde_class, (t_method)iem_samplerate_dsp, gensym("dsp"), 0);
}
Index: makefile_win
===================================================================
RCS file: /cvsroot/pure-data/externals/iemlib/src/iemlib2/makefile_win,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -d -r1.7 -r1.8
*** makefile_win 7 Nov 2006 17:11:40 -0000 1.7
--- makefile_win 8 Nov 2006 10:48:53 -0000 1.8
***************
*** 21,37 ****
dollarg.c \
exp_inc.c \
float24.c \
iem_anything.c \
iem_append.c \
iem_i_route.c \
iem_pbank_csv.c \
- iem_prepend_kernel.c \
iem_prepend.c \
iem_receive.c \
iem_route.c \
iem_sel_any.c \
iem_send.c \
init.c \
list2send.c \
mergefilename.c \
modulo_counter.c \
--- 21,41 ----
dollarg.c \
exp_inc.c \
+ fade~.c \
float24.c \
iem_anything.c \
iem_append.c \
+ iem_blocksize~.c \
iem_i_route.c \
iem_pbank_csv.c \
iem_prepend.c \
iem_receive.c \
iem_route.c \
+ iem_samplerate~.c \
iem_sel_any.c \
iem_send.c \
init.c \
+ LFO_noise~.c \
list2send.c \
+ m2f~.c \
mergefilename.c \
modulo_counter.c \
***************
*** 43,51 ****
receive2list.c \
round_zero.c \
- sigfade.c \
- sigiem_blocksize.c \
- sigiem_samplerate.c \
- sigLFO_noise.c \
- sigm2f.c \
speedlim.c \
splitfilename.c \
--- 47,50 ----
--- NEW FILE: m2f~.c ---
/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
iemlib2 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2005 */
#include "m_pd.h"
#include "iemlib.h"
#include <math.h>
/* ----------- m2f~ ----------- */
/* --------- obsolete --------- */
#define M2FTABSIZE 2048
t_float *iem_m2f_tilde_table=(t_float *)0L;
static t_class *m2f_tilde_class;
typedef struct _m2f
{
t_object x_obj;
t_float x_msi;
} t_m2f_tilde;
static void *m2f_new(void)
{
t_m2f_tilde *x = (t_m2f_tilde *)pd_new(m2f_tilde_class);
outlet_new(&x->x_obj, gensym("signal"));
x->x_msi = 0;
return (x);
}
static t_int *m2f_perform(t_int *w)
{
t_float *in = (t_float *)(w[1]);
t_float *out = (t_float *)(w[2]);
t_m2f_tilde *x = (t_m2f_tilde *)(w[3]);
int n = (int)(w[4]);
t_float *tab = iem_m2f_tilde_table, *addr, f1, f2, frac, iinn;
double dphase;
int normhipart;
union tabfudge tf;
tf.tf_d = UNITBIT32;
normhipart = tf.tf_i[HIOFFSET];
#if 0 /* this is the readable version of the code. */
while (n--)
{
iinn = (*in++)*10.0+670.0;
dphase = (double)iinn + UNITBIT32;
tf.tf_d = dphase;
addr = tab + (tf.tf_i[HIOFFSET] & (M2FTABSIZE-1));
tf.tf_i[HIOFFSET] = normhipart;
frac = tf.tf_d - UNITBIT32;
f1 = addr[0];
f2 = addr[1];
*out++ = f1 + frac * (f2 - f1);
}
#endif
#if 1 /* this is the same, unwrapped by hand. */
iinn = (*in++)*10.0+670.0;
dphase = (double)iinn + UNITBIT32;
tf.tf_d = dphase;
addr = tab + (tf.tf_i[HIOFFSET] & (M2FTABSIZE-1));
tf.tf_i[HIOFFSET] = normhipart;
while (--n)
{
iinn = (*in++)*10.0+670.0;
dphase = (double)iinn + UNITBIT32;
frac = tf.tf_d - UNITBIT32;
tf.tf_d = dphase;
f1 = addr[0];
f2 = addr[1];
addr = tab + (tf.tf_i[HIOFFSET] & (M2FTABSIZE-1));
*out++ = f1 + frac * (f2 - f1);
tf.tf_i[HIOFFSET] = normhipart;
}
frac = tf.tf_d - UNITBIT32;
f1 = addr[0];
f2 = addr[1];
*out++ = f1 + frac * (f2 - f1);
#endif
return (w+5);
}
static void m2f_dsp(t_m2f_tilde *x, t_signal **sp)
{
dsp_add(m2f_perform, 4, sp[0]->s_vec, sp[1]->s_vec, x, sp[0]->s_n);
}
static void m2f_maketable(void)
{
union tabfudge tf;
if(!iem_m2f_tilde_table)
{
int i;
t_float *fp, midi, refexp=440.0*exp(-5.75*log(2.0));
iem_m2f_tilde_table = (t_float *)getbytes(sizeof(t_float) * (M2FTABSIZE+1));
for(i=0, fp=iem_m2f_tilde_table, midi=-67.0; i<=M2FTABSIZE; i++, fp++, midi+=0.1)
*fp = refexp * exp(0.057762265047 * midi);
}
tf.tf_d = UNITBIT32 + 0.5;
if((unsigned)tf.tf_i[LOWOFFSET] != 0x80000000)
bug("m2f~: unexpected machine alignment");
}
void m2f_tilde_setup(void)
{
m2f_tilde_class = class_new(gensym("m2f~"), (t_newmethod)m2f_new, 0,
sizeof(t_m2f_tilde), 0, 0);
CLASS_MAINSIGNALIN(m2f_tilde_class, t_m2f_tilde, x_msi);
class_addmethod(m2f_tilde_class, (t_method)m2f_dsp, gensym("dsp"), 0);
m2f_maketable();
class_sethelpsymbol(m2f_tilde_class, gensym("iemhelp/help-m2f~"));
}
--- NEW FILE: iem_blocksize~.c ---
/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
iemlib2 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2005 */
#include "m_pd.h"
#include "iemlib.h"
/* ------------------- iem_blocksize~ -------------------- */
/* -- outputs the current signal-blocksize of a window --- */
static t_class *iem_blocksize_tilde_class;
typedef struct _iem_blocksize
{
t_object x_obj;
t_float x_blocksize;
t_clock *x_clock;
t_float x_f;
} t_iem_blocksize_tilde;
static void iem_blocksize_out(t_iem_blocksize_tilde *x)
{
outlet_float(x->x_obj.ob_outlet, x->x_blocksize);
}
static void iem_blocksize_free(t_iem_blocksize_tilde *x)
{
clock_free(x->x_clock);
}
static void *iem_blocksize_new(t_symbol *s)
{
t_iem_blocksize_tilde *x = (t_iem_blocksize_tilde *)pd_new(iem_blocksize_tilde_class);
x->x_clock = clock_new(x, (t_method)iem_blocksize_out);
outlet_new(&x->x_obj, &s_float);
x->x_blocksize = 64.0f;
x->x_f = 0.0f;
return (x);
}
static void iem_blocksize_dsp(t_iem_blocksize_tilde *x, t_signal **sp)
{
x->x_blocksize = (t_float)(sp[0]->s_n);
clock_delay(x->x_clock, 0.0f);
}
void iem_blocksize_tilde_setup(void)
{
iem_blocksize_tilde_class = class_new(gensym("iem_blocksize~"), (t_newmethod)iem_blocksize_new,
(t_method)iem_blocksize_free, sizeof(t_iem_blocksize_tilde), 0, 0);
CLASS_MAINSIGNALIN(iem_blocksize_tilde_class, t_iem_blocksize_tilde, x_f);
class_addmethod(iem_blocksize_tilde_class, (t_method)iem_blocksize_dsp, gensym("dsp"), 0);
}