Update of /cvsroot/pure-data/externals/zexy/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3936
Modified Files: absgn~.c abs~.c avg~.c blockmirror~.c blockshuffle~.c blockswap~.c demultiplex~.c dfreq~.c dirac~.c envrms~.c limiter~.c multiline~.c multiplex~.c noish~.c noisi~.c pack~.c pdf~.c quantize~.c sgn~.c sigzero~.c step~.c swap~.c tavg~.c unpack~.c z~.c Log Message: use t_float and t_sample when possible
Index: dirac~.c =================================================================== RCS file: /cvsroot/pure-data/externals/zexy/src/dirac~.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** dirac~.c 14 Mar 2007 09:08:56 -0000 1.6 --- dirac~.c 30 Oct 2007 09:21:51 -0000 1.7 *************** *** 39,76 **** typedef struct _dirac { ! t_object x_obj; ! t_int position; ! t_int do_it; } t_dirac;
static void dirac_bang(t_dirac *x) { ! x->do_it = x->position; }
static void dirac_float(t_dirac *x, t_float where) { ! x->do_it = x->position = (t_int)where; }
static t_int *dirac_perform(t_int *w) { ! t_dirac *x = (t_dirac *)(w[1]); ! t_float *out = (t_float *)(w[2]); ! int n = (int)(w[3]); ! t_int do_it = x->do_it;
! zero_perform(w+1);
! if (do_it >= n) ! x->do_it -= n; ! else if(do_it >= 0) ! { ! out[do_it] = 1.f; ! x->do_it = -1; ! }
! return (w+4); }
--- 39,76 ---- typedef struct _dirac { ! t_object x_obj; ! t_int position; ! t_int do_it; } t_dirac;
static void dirac_bang(t_dirac *x) { ! x->do_it = x->position; }
static void dirac_float(t_dirac *x, t_float where) { ! x->do_it = x->position = (t_int)where; }
static t_int *dirac_perform(t_int *w) { ! t_dirac *x = (t_dirac *)(w[1]); ! t_sample *out = (t_sample *)(w[2]); ! int n = (int)(w[3]); ! t_int do_it = x->do_it;
! zero_perform(w+1);
! if (do_it >= n) ! x->do_it -= n; ! else if(do_it >= 0) ! { ! out[do_it] = 1.f; ! x->do_it = -1; ! }
! return (w+4); }
*************** *** 78,126 **** static t_int *dirac_perf8(t_int *w) { ! t_dirac *x = (t_dirac *)(w[1]); ! t_float *out = (t_float *)(w[2]); ! int n = (int)(w[3]); ! t_int do_it = x->do_it;
#ifndef __WIN32__ ! /* LATER: investigate the occurence of zero_perf8() */ ! /* it seems, like pd has the symbol zero_perf8(), ! * but it is not exported by m_pd.h: ! * so linux can use it, but w32 not ! * have to tell miller about that ! */ ! zero_perf8(w+1); #else ! zero_perform(w+1); #endif
! if (do_it >= n) ! x->do_it -= n; ! else if(do_it >= 0) ! { ! out[do_it] = 1.f; ! x->do_it = -1; ! }
! return (w+4); }
static void dirac_dsp(t_dirac *x, t_signal **sp) { ! if (sp[0]->s_n & 7) ! dsp_add(dirac_perform, 3, x, sp[0]->s_vec, sp[0]->s_n); ! else ! dsp_add(dirac_perf8, 3, x, sp[0]->s_vec, sp[0]->s_n); }
static void dirac_helper(void) { ! post("%c dirac~-object :: generates a dirac (unity-pulse)", HEARTSYMBOL); ! post("creation : "dirac~ [<position>]" : create a dirac at specified position (in samples)\n" ! "inlet\t: <position>\t: create a dirac at new position\n" ! "\t 'bang'\t: create a dirac at specified position\n" ! "\t 'help'\t: view this\n" ! "outlet\t: signal~"); }
--- 78,126 ---- static t_int *dirac_perf8(t_int *w) { ! t_dirac *x = (t_dirac *)(w[1]); ! t_sample *out = (t_sample *)(w[2]); ! int n = (int)(w[3]); ! t_int do_it = x->do_it;
#ifndef __WIN32__ ! /* LATER: investigate the occurence of zero_perf8() */ ! /* it seems, like pd has the symbol zero_perf8(), ! * but it is not exported by m_pd.h: ! * so linux can use it, but w32 not ! * have to tell miller about that ! */ ! zero_perf8(w+1); #else ! zero_perform(w+1); #endif
! if (do_it >= n) ! x->do_it -= n; ! else if(do_it >= 0) ! { ! out[do_it] = 1.f; ! x->do_it = -1; ! }
! return (w+4); }
static void dirac_dsp(t_dirac *x, t_signal **sp) { ! if (sp[0]->s_n & 7) ! dsp_add(dirac_perform, 3, x, sp[0]->s_vec, sp[0]->s_n); ! else ! dsp_add(dirac_perf8, 3, x, sp[0]->s_vec, sp[0]->s_n); }
static void dirac_helper(void) { ! post("%c dirac~-object :: generates a dirac (unity-pulse)", HEARTSYMBOL); ! post("creation : "dirac~ [<position>]" : create a dirac at specified position (in samples)\n" ! "inlet\t: <position>\t: create a dirac at new position\n" ! "\t 'bang'\t: create a dirac at specified position\n" ! "\t 'help'\t: view this\n" ! "outlet\t: signal~"); }
*************** *** 129,154 **** static void *dirac_new(t_floatarg where) { ! t_dirac *x = (t_dirac *)pd_new(dirac_class);
! outlet_new(&x->x_obj, gensym("signal"));
! x->do_it = where;
! if (where > 0) ! x->position = where; ! else ! x->position = -where; ! return (x); }
void dirac_tilde_setup(void) { ! dirac_class = class_new(gensym("dirac~"), (t_newmethod)dirac_new, 0, ! sizeof(t_dirac), 0, A_DEFFLOAT, 0); ! class_addfloat(dirac_class, dirac_float); ! class_addbang(dirac_class, dirac_bang); ! class_addmethod(dirac_class, (t_method)dirac_dsp, gensym("dsp"), 0);
! class_addmethod(dirac_class, (t_method)dirac_helper, gensym("help"), 0); zexy_register("dirac~"); } --- 129,154 ---- static void *dirac_new(t_floatarg where) { ! t_dirac *x = (t_dirac *)pd_new(dirac_class);
! outlet_new(&x->x_obj, gensym("signal"));
! x->do_it = where;
! if (where > 0) ! x->position = where; ! else ! x->position = -where; ! return (x); }
void dirac_tilde_setup(void) { ! dirac_class = class_new(gensym("dirac~"), (t_newmethod)dirac_new, 0, ! sizeof(t_dirac), 0, A_DEFFLOAT, 0); ! class_addfloat(dirac_class, dirac_float); ! class_addbang(dirac_class, dirac_bang); ! class_addmethod(dirac_class, (t_method)dirac_dsp, gensym("dsp"), 0);
! class_addmethod(dirac_class, (t_method)dirac_helper, gensym("help"), 0); zexy_register("dirac~"); }
Index: noisi~.c =================================================================== RCS file: /cvsroot/pure-data/externals/zexy/src/noisi~.c,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** noisi~.c 14 Mar 2007 09:08:56 -0000 1.5 --- noisi~.c 30 Oct 2007 09:21:52 -0000 1.6 *************** *** 42,49 **** t_object x_obj; int val; ! t_float current; ! t_float decrement; ! t_float updater; ! t_float to_go; } t_nois;
--- 42,49 ---- t_object x_obj; int val; ! t_sample current; ! t_sample decrement; ! t_sample updater; ! t_sample to_go; } t_nois;
*************** *** 59,62 **** --- 59,70 ---- }
+ + static void set_noisseed(t_nois *x, t_floatarg seed) + { + x->val = seed; + } + + + /* ------------------------ noisi~ ----------------------------- */
*************** *** 65,77 **** static t_int *noisi_perform(t_int *w){ t_nois *x = (t_nois *)(w[1]); ! t_float *out = (t_float *)(w[2]); int n = (int)(w[3]);
! int *vp = (int *)(&x->val); /* what the ... */ ! int i_value = *vp; ! t_float f_value = x->current; ! t_float decrement = x->decrement; ! t_float all_to_go = x->updater; ! t_float still_to_go = x->to_go;
if (all_to_go == 1) { --- 73,84 ---- static t_int *noisi_perform(t_int *w){ t_nois *x = (t_nois *)(w[1]); ! t_sample *out = (t_sample *)(w[2]); int n = (int)(w[3]);
! int i_value = x->val; ! t_sample f_value = x->current; ! t_sample decrement = x->decrement; ! t_sample all_to_go = x->updater; ! t_sample still_to_go = x->to_go;
if (all_to_go == 1) { *************** *** 99,103 **** ((t_sample)((i_value & 0x7fffffff)-0x40000000))*(t_sample)(1.0 / 0x40000000)) - ((t_sample)(((i_value = i_value * 435898247 + 382842987) & 0x7fffffff) ! - 0x40000000)) * (t_sample)(1.0 / 0x40000000) ) / all_to_go;
--- 106,110 ---- ((t_sample)((i_value & 0x7fffffff)-0x40000000))*(t_sample)(1.0 / 0x40000000)) - ((t_sample)(((i_value = i_value * 435898247 + 382842987) & 0x7fffffff) ! - 0x40000000)) * (t_sample)(1.0 / 0x40000000) ) / all_to_go;
*************** *** 120,124 **** }
! *vp = i_value; x->current = f_value; x->decrement = decrement; --- 127,131 ---- }
! x->val = i_value; x->current = f_value; x->decrement = decrement; *************** *** 163,166 **** --- 170,175 ---- class_addmethod(noisi_class, (t_method)noisi_dsp, gensym("dsp"), 0);
+ class_addmethod(noisi_class, (t_method)set_noisseed, gensym("seed"), A_FLOAT, 0); + class_addmethod(noisi_class, (t_method)noisi_helper, gensym("help"), 0); zexy_register("noisi~");
Index: dfreq~.c =================================================================== RCS file: /cvsroot/pure-data/externals/zexy/src/dfreq~.c,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** dfreq~.c 14 Mar 2007 09:08:56 -0000 1.5 --- dfreq~.c 30 Oct 2007 09:21:51 -0000 1.6 *************** *** 29,36 **** t_object x_obj;
! t_float freq; /*freqenz variable */ ! t_float alt; ! float sampcount; ! t_float sr; } t_dfreq;
--- 29,36 ---- t_object x_obj;
! t_sample freq; /*frequenz variable */ ! t_sample alt; ! t_sample sampcount; ! t_sample sr; } t_dfreq;
*************** *** 38,50 **** static t_int *dfreq_perform(t_int *w) { ! t_float *in = (t_float *)(w[1]); ! t_float *out = (t_float *)(w[2]); int n = (int)(w[3]); t_dfreq *x = (t_dfreq *) w[4];
! t_float a = x->alt, c = x->sampcount; ! t_float freq = x->freq, sr=x->sr;
! t_float delta_inv;
while (n--) { --- 38,52 ---- static t_int *dfreq_perform(t_int *w) { ! t_sample *in = (t_sample *)(w[1]); ! t_sample *out = (t_sample *)(w[2]); int n = (int)(w[3]); t_dfreq *x = (t_dfreq *) w[4];
! t_sample a = x->alt; ! t_sample c = x->sampcount; ! t_sample freq = x->freq; ! t_sample sr=x->sr;
! t_sample delta_inv;
while (n--) { *************** *** 52,61 **** if( (a * *in) < 0 && (a < *in)){
! /* interpolate for real zerocross */ ! delta_inv = 1./(*in-a); if(c > 0.0) ! freq = sr / ((t_float) c + a*delta_inv); else ! freq = sr;
c = *in*delta_inv; /*rest of time */ --- 54,63 ---- if( (a * *in) < 0 && (a < *in)){
! /* interpolate for real zerocross */ ! delta_inv = 1./(*in-a); if(c > 0.0) ! freq = sr / ((t_sample) c + a*delta_inv); else ! freq = sr;
c = *in*delta_inv; /*rest of time */ *************** *** 77,81 **** static void dfreq_dsp(t_dfreq *x, t_signal **sp) { ! dsp_add(dfreq_perform, 4, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n,x); }
--- 79,83 ---- static void dfreq_dsp(t_dfreq *x, t_signal **sp) { ! dsp_add(dfreq_perform, 4, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n,x); }
*************** *** 94,100 **** static void dfreq_tilde_helper(void) { ! post("\n%c dfreq~\t :: pitch-detector that counts zero-crossings", HEARTSYMBOL); ! post("\noutputs a frequency estimate as a stream~ that will be updated every zero-X"); ! post("\ncreation::\t'dfreq~': that's all"); }
--- 96,102 ---- static void dfreq_tilde_helper(void) { ! post("\n%c dfreq~\t :: pitch-detector that counts zero-crossings", HEARTSYMBOL); ! post("\noutputs a frequency estimate as a stream~ that will be updated every zero-X"); ! post("\ncreation::\t'dfreq~': that's all"); }
*************** *** 102,111 **** void dfreq_tilde_setup(void) { ! dfreq_class = class_new(gensym("dfreq~"), (t_newmethod)dfreq_new, 0, ! sizeof(t_dfreq), 0, A_NULL); ! class_addmethod(dfreq_class, nullfn, gensym("signal"), 0); ! class_addmethod(dfreq_class, (t_method)dfreq_dsp, gensym("dsp"), 0);
! class_addmethod(dfreq_class, (t_method)dfreq_tilde_helper, gensym("help"), 0); zexy_register("dfreq~"); } --- 104,113 ---- void dfreq_tilde_setup(void) { ! dfreq_class = class_new(gensym("dfreq~"), (t_newmethod)dfreq_new, 0, ! sizeof(t_dfreq), 0, A_NULL); ! class_addmethod(dfreq_class, nullfn, gensym("signal"), 0); ! class_addmethod(dfreq_class, (t_method)dfreq_dsp, gensym("dsp"), 0);
! class_addmethod(dfreq_class, (t_method)dfreq_tilde_helper, gensym("help"), 0); zexy_register("dfreq~"); }
Index: unpack~.c =================================================================== RCS file: /cvsroot/pure-data/externals/zexy/src/unpack~.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** unpack~.c 14 Mar 2007 09:08:56 -0000 1.6 --- unpack~.c 30 Oct 2007 09:21:52 -0000 1.7 *************** *** 30,35 **** { t_object x_obj; ! t_float *buffer; ! t_float *rp, *wp; int bufsize;
--- 30,35 ---- { t_object x_obj; ! t_sample *buffer; ! t_sample *rp, *wp; int bufsize;
*************** *** 48,60 **** t_atom *ap = argv; int i; - ZEXY_USEVAR(s); - for (i = 0, ap = argv; i < argc; ap++, i++) { ! // if (ap->a_type == A_FLOAT) { ! if (x->wp + 1 != x->rp) { ! *(x->wp)++ = atom_getfloat(ap); ! if (x->wp == x->buffer + x->bufsize) x->wp = x->buffer; ! } ! // } } } --- 48,56 ---- t_atom *ap = argv; int i; for (i = 0, ap = argv; i < argc; ap++, i++) { ! if (x->wp + 1 != x->rp) { ! *(x->wp)++ = atom_getfloat(ap); ! if (x->wp == x->buffer + x->bufsize) x->wp = x->buffer; ! } } } *************** *** 63,71 **** static t_int *sigunpack_perform(t_int *w) { ! t_float *out = (t_float *)(w[1]); t_sigunpack *x = (t_sigunpack *)w[2]; int n = (int)(w[3]);
! t_float *buf = x->rp; int hitchhike = 0;
--- 59,67 ---- static t_int *sigunpack_perform(t_int *w) { ! t_sample *out = (t_sample *)(w[1]); t_sigunpack *x = (t_sigunpack *)w[2]; int n = (int)(w[3]);
! t_sample *buf = x->rp; int hitchhike = 0;
*************** *** 87,92 **** if (x->bufsize % sp[0]->s_n) { int newsize = sp[0]->s_n*(1+(int)(x->bufsize/sp[0]->s_n)); ! freebytes(x->buffer, x->bufsize * sizeof(t_float)); ! x->buffer = (t_float *)getbytes(newsize * sizeof(t_float));
x->rp = x->wp = x->buffer; --- 83,88 ---- if (x->bufsize % sp[0]->s_n) { int newsize = sp[0]->s_n*(1+(int)(x->bufsize/sp[0]->s_n)); ! freebytes(x->buffer, x->bufsize * sizeof(*x->buffer)); ! x->buffer = (t_sample *)getbytes(newsize * sizeof(*x->buffer));
x->rp = x->wp = x->buffer; *************** *** 106,110 **** else bufsize = (suggestedsize % 64)?(64*(1+(int)(suggestedsize/64))):suggestedsize;
! x->buffer = (t_float *)getbytes(bufsize * sizeof(t_float)); x->bufsize = bufsize; x->rp = x->wp = x->buffer; --- 102,106 ---- else bufsize = (suggestedsize % 64)?(64*(1+(int)(suggestedsize/64))):suggestedsize;
! x->buffer = (t_sample *)getbytes(bufsize * sizeof(*x->buffer)); x->bufsize = bufsize; x->rp = x->wp = x->buffer; *************** *** 123,127 **** { sigunpack_class = class_new(gensym("unpack~"), (t_newmethod)sigunpack_new, 0, ! sizeof(t_sigunpack), 0, A_DEFFLOAT, 0); class_addmethod(sigunpack_class, (t_method)sigunpack_dsp, gensym("dsp"), 0); class_addfloat(sigunpack_class, (t_method)sigunpack_float); --- 119,123 ---- { sigunpack_class = class_new(gensym("unpack~"), (t_newmethod)sigunpack_new, 0, ! sizeof(t_sigunpack), 0, A_DEFFLOAT, 0); class_addmethod(sigunpack_class, (t_method)sigunpack_dsp, gensym("dsp"), 0); class_addfloat(sigunpack_class, (t_method)sigunpack_float);
Index: demultiplex~.c =================================================================== RCS file: /cvsroot/pure-data/externals/zexy/src/demultiplex~.c,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** demultiplex~.c 14 Mar 2007 09:08:55 -0000 1.7 --- demultiplex~.c 30 Oct 2007 09:21:51 -0000 1.8 *************** *** 86,117 **** static void *demux_new(t_symbol *s, int argc, t_atom *argv) { ! t_demux *x = (t_demux *)pd_new(demux_class); ! int i; ! ZEXY_USEVAR(s); ! ZEXY_USEVAR(argv);
! if (!argc)argc=2; ! x->n_out=argc; ! x->output=0;
! while(argc--)outlet_new(&x->x_obj, gensym("signal"));
! x->out = (t_sample **)getbytes(x->n_out * sizeof(t_sample *)); ! i=x->n_out; ! while(i--)x->out[i]=0;
! return (x); }
void demultiplex_tilde_setup(void) { ! demux_class = class_new(gensym("demultiplex~"), (t_newmethod)demux_new, (t_method)demux_free, sizeof(t_demux), 0, A_GIMME, 0); ! class_addcreator((t_newmethod)demux_new, gensym("demux~"), A_GIMME, 0);
! class_addfloat(demux_class, demux_output); ! class_addmethod(demux_class, (t_method)demux_dsp, gensym("dsp"), 0); ! class_addmethod(demux_class, nullfn, gensym("signal"), 0);
! class_addmethod(demux_class, (t_method)demux_helper, gensym("help"), 0);
zexy_register("demultiplex~"); --- 86,117 ---- static void *demux_new(t_symbol *s, int argc, t_atom *argv) { ! t_demux *x = (t_demux *)pd_new(demux_class); ! int i; ! ZEXY_USEVAR(s); ! ZEXY_USEVAR(argv);
! if (!argc)argc=2; ! x->n_out=argc; ! x->output=0;
! while(argc--)outlet_new(&x->x_obj, gensym("signal"));
! x->out = (t_sample **)getbytes(x->n_out * sizeof(t_sample *)); ! i=x->n_out; ! while(i--)x->out[i]=0;
! return (x); }
void demultiplex_tilde_setup(void) { ! demux_class = class_new(gensym("demultiplex~"), (t_newmethod)demux_new, (t_method)demux_free, sizeof(t_demux), 0, A_GIMME, 0); ! class_addcreator((t_newmethod)demux_new, gensym("demux~"), A_GIMME, 0);
! class_addfloat(demux_class, demux_output); ! class_addmethod(demux_class, (t_method)demux_dsp, gensym("dsp"), 0); ! class_addmethod(demux_class, nullfn, gensym("signal"), 0);
! class_addmethod(demux_class, (t_method)demux_helper, gensym("help"), 0);
zexy_register("demultiplex~"); *************** *** 119,123 **** void demux_tilde_setup(void) { ! demultiplex_tilde_setup(); }
--- 119,123 ---- void demux_tilde_setup(void) { ! demultiplex_tilde_setup(); }
Index: multiplex~.c =================================================================== RCS file: /cvsroot/pure-data/externals/zexy/src/multiplex~.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** multiplex~.c 14 Mar 2007 09:08:56 -0000 1.6 --- multiplex~.c 30 Oct 2007 09:21:52 -0000 1.7 *************** *** 29,33 ****
int n_in; ! t_float **in; } t_mux;
--- 29,33 ----
int n_in; ! t_sample **in; } t_mux;
*************** *** 44,51 **** { t_mux *x = (t_mux *)(w[1]); ! t_float *out = (t_float *)(w[2]); int n = (int)(w[3]);
! t_float *in = x->in[x->input];
while(n--)*out++=*in++; --- 44,51 ---- { t_mux *x = (t_mux *)(w[1]); ! t_sample *out = (t_sample *)(w[2]); int n = (int)(w[3]);
! t_sample *in = x->in[x->input];
while(n--)*out++=*in++; *************** *** 57,61 **** { int n = 0; ! t_float **dummy=x->in;
for(n=0;n<x->n_in;n++)*dummy++=sp[n]->s_vec; --- 57,61 ---- { int n = 0; ! t_sample **dummy=x->in;
for(n=0;n<x->n_in;n++)*dummy++=sp[n]->s_vec; *************** *** 74,118 **** static void mux_free(t_mux *x) { ! freebytes(x->in, x->n_in * sizeof(t_float *)); }
static void *mux_new(t_symbol *s, int argc, t_atom *argv) { ! t_mux *x = (t_mux *)pd_new(mux_class); ! int i; ! ZEXY_USEVAR(s); ! ZEXY_USEVAR(argv);
! if (!argc)argc=2; ! x->n_in=argc; ! x->input=0;
! argc--; ! while(argc--)inlet_new(&x->x_obj,&x->x_obj.ob_pd,&s_signal,&s_signal);
! x->in = (t_float **)getbytes(x->n_in * sizeof(t_float *)); ! i=x->n_in; ! while(i--)x->in[i]=0;
! outlet_new(&x->x_obj, gensym("signal"));
! return (x); }
void multiplex_tilde_setup(void) { ! mux_class = class_new(gensym("multiplex~"), (t_newmethod)mux_new, (t_method)mux_free, sizeof(t_mux), 0, A_GIMME, 0); ! class_addcreator((t_newmethod)mux_new, gensym("mux~"), A_GIMME, 0);
! class_addfloat(mux_class, mux_input); ! class_addmethod(mux_class, (t_method)mux_dsp, gensym("dsp"), 0); ! class_addmethod(mux_class, nullfn, gensym("signal"), 0);
! class_addmethod(mux_class, (t_method)mux_helper, gensym("help"), 0); zexy_register("multiplex~"); } void mux_tilde_setup(void) { ! multiplex_tilde_setup(); }
--- 74,118 ---- static void mux_free(t_mux *x) { ! freebytes(x->in, x->n_in * sizeof(t_sample *)); }
static void *mux_new(t_symbol *s, int argc, t_atom *argv) { ! t_mux *x = (t_mux *)pd_new(mux_class); ! int i; ! ZEXY_USEVAR(s); ! ZEXY_USEVAR(argv);
! if (!argc)argc=2; ! x->n_in=argc; ! x->input=0;
! argc--; ! while(argc--)inlet_new(&x->x_obj,&x->x_obj.ob_pd,&s_signal,&s_signal);
! x->in = (t_sample **)getbytes(x->n_in * sizeof(t_sample *)); ! i=x->n_in; ! while(i--)x->in[i]=0;
! outlet_new(&x->x_obj, gensym("signal"));
! return (x); }
void multiplex_tilde_setup(void) { ! mux_class = class_new(gensym("multiplex~"), (t_newmethod)mux_new, (t_method)mux_free, sizeof(t_mux), 0, A_GIMME, 0); ! class_addcreator((t_newmethod)mux_new, gensym("mux~"), A_GIMME, 0);
! class_addfloat(mux_class, mux_input); ! class_addmethod(mux_class, (t_method)mux_dsp, gensym("dsp"), 0); ! class_addmethod(mux_class, nullfn, gensym("signal"), 0);
! class_addmethod(mux_class, (t_method)mux_helper, gensym("help"), 0); zexy_register("multiplex~"); } void mux_tilde_setup(void) { ! multiplex_tilde_setup(); }
Index: limiter~.c =================================================================== RCS file: /cvsroot/pure-data/externals/zexy/src/limiter~.c,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** limiter~.c 14 Mar 2007 09:08:56 -0000 1.8 --- limiter~.c 30 Oct 2007 09:21:52 -0000 1.9 *************** *** 17,26 ****
/* ! --------------------------------- limiter/compressor --------------------------------- ! for details on how it works watch out for "http://iem.kug.ac.at/~zmoelnig/pd" ! ...and search for "limiter"
! mail2me4more!n4m8ion : zmoelnig@iem.kug.ac.at */
--- 17,26 ----
/* ! --------------------------------- limiter/compressor --------------------------------- ! for details on how it works watch out for "http://iem.kug.ac.at/~zmoelnig/pd" ! ...and search for "limiter"
! mail2me4more!n4m8ion : zmoelnig@iem.kug.ac.at */
*************** *** 63,82 **** typedef struct _limctl { // variables changed by user ! float limit, hold_samples, change_of_amplification; } t_limctl;
typedef struct _cmpctl { ! float treshold, ratio; // uclimit is the very same is the limiter1-limit (decalculated relative to our treshold) ! float uclimit, climit_inverse; // climit == compressed limit (uclimit == uncompressed limit)
! float limiter_limit; // start limiting (stop compressing); == tresh/limit;
! float treshdB, oneminusratio; } t_cmpctl;
typedef struct _inbuf { ! float* ringbuf; int buf_position; } t_inbuf; --- 63,82 ---- typedef struct _limctl { // variables changed by user ! t_float limit, hold_samples, change_of_amplification; } t_limctl;
typedef struct _cmpctl { ! t_float treshold, ratio; // uclimit is the very same is the limiter1-limit (decalculated relative to our treshold) ! t_float uclimit, climit_inverse; // climit == compressed limit (uclimit == uncompressed limit)
! t_float limiter_limit; // start limiting (stop compressing); == tresh/limit;
! t_float treshdB, oneminusratio; } t_cmpctl;
typedef struct _inbuf { ! t_sample* ringbuf; int buf_position; } t_inbuf; *************** *** 90,95 **** // variables changed by process
! float amplification; ! float samples_left, still_left;
int mode; --- 90,95 ---- // variables changed by process
! t_sample amplification; ! t_float samples_left, still_left;
int mode; *************** *** 115,119 **** static t_float calc_holdsamples(t_float htime, int buf) { // hold_time must be greater than buffer_time to make sure that any peak_sample is amplified with its own factor ! float min_hold = buf / sys_getsr(); return (0.001 * sys_getsr() * ((htime > min_hold)?htime:((min_hold > 50)?min_hold:50))); } --- 115,119 ---- static t_float calc_holdsamples(t_float htime, int buf) { // hold_time must be greater than buffer_time to make sure that any peak_sample is amplified with its own factor ! t_float min_hold = buf / sys_getsr(); return (0.001 * sys_getsr() * ((htime > min_hold)?htime:((min_hold > 50)?min_hold:50))); } *************** *** 138,145 **** // settings
! static void set_treshold(t_limiter *x, float treshold) { t_cmpctl *c = x->cmp; ! float tresh = dbtorms (treshold); if (tresh > x->val1->limit) tresh = x->val1->limit;
--- 138,145 ---- // settings
! static void set_treshold(t_limiter *x, t_float treshold) { t_cmpctl *c = x->cmp; ! t_float tresh = dbtorms (treshold); if (tresh > x->val1->limit) tresh = x->val1->limit;
*************** *** 149,153 **** }
! static void set_ratio(t_limiter *x, float ratio) { if (ratio < 0) ratio = 1; --- 149,153 ---- }
! static void set_ratio(t_limiter *x, t_float ratio) { if (ratio < 0) ratio = 1; *************** *** 157,161 **** }
! static void set_mode(t_limiter *x, float mode) { int modus = mode; --- 157,161 ---- }
! static void set_mode(t_limiter *x, t_float mode) { int modus = mode; *************** *** 193,197 **** }
! static void set_bufsize(t_limiter *x, float size) { // this is really unneeded...and for historical reasons only if (size < BUFSIZE) size = BUFSIZE; --- 193,197 ---- }
! static void set_bufsize(t_limiter *x, int size) { // this is really unneeded...and for historical reasons only if (size < BUFSIZE) size = BUFSIZE; *************** *** 359,364 **** t_limiter *x = (t_limiter *)w[1]; t_inbuf *buf = (t_inbuf *)w[2]; ! t_float *in = (t_float *)w[3]; ! t_float *out = (t_float *)w[4];
int n = x->s_n; --- 359,364 ---- t_limiter *x = (t_limiter *)w[1]; t_inbuf *buf = (t_inbuf *)w[2]; ! t_sample *in = (t_sample *)w[3]; ! t_sample *out = (t_sample *)w[4];
int n = x->s_n; *************** *** 367,371 **** int i = buf->buf_position;
! t_float *vp = buf->ringbuf, *ep = vp + bufsize, *bp = vp + XTRASAMPS + i;
i += n; --- 367,371 ---- int i = buf->buf_position;
! t_sample *vp = buf->ringbuf, *ep = vp + bufsize, *bp = vp + XTRASAMPS + i;
i += n; *************** *** 373,378 **** while (n--) { ! t_float os1, os2, max; ! t_float last4, last3, last2, last1, sinccurrent, current, next1, next2, next3, next4;
if (bp == ep) --- 373,378 ---- while (n--) { ! t_sample os1, os2, max; ! t_sample last4, last3, last2, last1, sinccurrent, current, next1, next2, next3, next4;
if (bp == ep) *************** *** 437,442 **** int n = x->s_n;
! t_float *in = (t_float *)w[2]; ! t_float *out= (t_float *)w[3];
t_limctl *v1 = (t_limctl *)(x->val1); --- 437,442 ---- int n = x->s_n;
! t_sample *in = (t_sample *)w[2]; ! t_sample *out= (t_sample *)w[3];
t_limctl *v1 = (t_limctl *)(x->val1); *************** *** 482,494 **** samplesleft = holdlong; } else ! { ! if (samplesleft > 0) ! { ! samplesleft--; ! } else ! { ! if ((amp *= coa_long) > 1) amp = 1; ! } ! }
*out++ = amp; --- 482,494 ---- samplesleft = holdlong; } else ! { ! if (samplesleft > 0) ! { ! samplesleft--; ! } else ! { ! if ((amp *= coa_long) > 1) amp = 1; ! } ! }
*out++ = amp; *************** *** 507,532 **** stillleft = holdlong; } else ! { ! if (samplesleft > 0) ! { ! samplesleft--; ! stillleft--; ! } else ! { ! if (amp < alimit) ! { ! if ((amp *= coa_short) > 1) amp = 1; ! } else ! { ! if (stillleft > 0) ! { ! samplesleft = stillleft; ! } else ! { ! if ((amp *= coa_long) > 1) amp = 1; ! } ! } ! } ! } *out++ = amp; *in++ = 0; --- 507,532 ---- stillleft = holdlong; } else ! { ! if (samplesleft > 0) ! { ! samplesleft--; ! stillleft--; ! } else ! { ! if (amp < alimit) ! { ! if ((amp *= coa_short) > 1) amp = 1; ! } else ! { ! if (stillleft > 0) ! { ! samplesleft = stillleft; ! } else ! { ! if ((amp *= coa_long) > 1) amp = 1; ! } ! } ! } ! } *out++ = amp; *in++ = 0; *************** *** 573,577 **** { int i = 0; ! t_float* sig_buf = (t_float *)getbytes(sizeof(t_float) * sp[0]->s_n);
x->s_n = sp[0]->s_n; --- 573,577 ---- { int i = 0; ! t_sample* sig_buf = (t_sample *)getbytes(sizeof(*sig_buf) * sp[0]->s_n);
x->s_n = sp[0]->s_n; *************** *** 623,627 **** { int n; ! t_float* buf = (float *)getbytes(sizeof(float) * x->buf_size); x->in[i].ringbuf = buf; x->in[i].buf_position = 0; --- 623,627 ---- { int n; ! t_sample* buf = (t_sample *)getbytes(sizeof(*buf) * x->buf_size); x->in[i].ringbuf = buf; x->in[i].buf_position = 0; *************** *** 654,658 **** freebytes(x->cmp , sizeof(t_cmpctl));
! while (i < x->number_of_inlets) freebytes(x->in[i++].ringbuf, x->buf_size * sizeof(t_float));
freebytes(x->in, x->number_of_inlets * sizeof(t_inbuf)); --- 654,658 ---- freebytes(x->cmp , sizeof(t_cmpctl));
! while (i < x->number_of_inlets) freebytes(x->in[i++].ringbuf, x->buf_size * sizeof(t_sample));
freebytes(x->in, x->number_of_inlets * sizeof(t_inbuf));
Index: swap~.c =================================================================== RCS file: /cvsroot/pure-data/externals/zexy/src/swap~.c,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** swap~.c 14 Mar 2007 09:08:56 -0000 1.4 --- swap~.c 30 Oct 2007 09:21:52 -0000 1.5 *************** *** 15,22 ****
/* ! the long waited for swap~-object that does a byte swap ! of course, we unfortunately have to quantize the float-signal to 16bit (to get bytes)
! 1110:forum::für::umläute:1999 */
--- 15,22 ----
/* ! the long waited for swap~-object that does a byte swap ! of course, we unfortunately have to quantize the float-signal to 16bit (to get bytes)
! 1110:forum::für::umläute:1999 */
*************** *** 48,53 **** { t_swap *x = (t_swap *)(w[1]); ! t_float *in = (t_float *)(w[2]); ! t_float *out = (t_float *)(w[3]); int n = (int)(w[4]);
--- 48,53 ---- { t_swap *x = (t_swap *)(w[1]); ! t_sample *in = (t_sample *)(w[2]); ! t_sample *out = (t_sample *)(w[3]); int n = (int)(w[4]);
Index: tavg~.c =================================================================== RCS file: /cvsroot/pure-data/externals/zexy/src/tavg~.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** tavg~.c 14 Mar 2007 09:08:56 -0000 1.6 --- tavg~.c 30 Oct 2007 09:21:52 -0000 1.7 *************** *** 24,30 **** { t_object x_obj; ! t_float n_inv; ! t_float buf; ! int blocks; } t_tavgtilde;
--- 24,30 ---- { t_object x_obj; ! t_sample n_inv; ! t_sample buf; ! unsigned int blocks; } t_tavgtilde;
*************** *** 33,37 **** { if (x->blocks) { ! outlet_float(x->x_obj.ob_outlet, x->buf*x->n_inv/x->blocks); x->blocks = 0; x->buf = 0.; --- 33,38 ---- { if (x->blocks) { ! t_float result=x->buf*x->n_inv/x->blocks; ! outlet_float(x->x_obj.ob_outlet, result); x->blocks = 0; x->buf = 0.; *************** *** 41,87 **** static t_int *tavg_perform(t_int *w) { ! t_float *in = (t_float *)(w[1]); ! t_tavgtilde *x = (t_tavgtilde *)w[2]; ! int n = (int)(w[3]); ! ! t_float buf = x->buf; ! ! while (n--) buf += *in++; ! ! x->buf = buf; ! x->blocks++;
! return (w+4); }
static void tavg_dsp(t_tavgtilde *x, t_signal **sp) { ! x->n_inv=1./sp[0]->s_n; ! dsp_add(tavg_perform, 3, sp[0]->s_vec, x, sp[0]->s_n); }
static void *tavg_new(void) { ! t_tavgtilde *x = (t_tavgtilde *)pd_new(tavg_class); ! outlet_new(&x->x_obj, gensym("float")); ! return (x); }
static void tavg_help(void) { ! post("tavg~\t\t:: outputs the arithmetic mean of a signal when triggered"); ! post("<bang>\t\t: triggers the output"); }
void tavg_tilde_setup(void) { ! tavg_class = class_new(gensym("tavg~"), (t_newmethod)tavg_new, 0, ! sizeof(t_tavgtilde), 0, A_DEFFLOAT, 0); ! class_addmethod(tavg_class, nullfn, gensym("signal"), 0); ! class_addmethod(tavg_class, (t_method)tavg_dsp, gensym("dsp"), 0);
! class_addbang(tavg_class, tavg_bang);
! class_addmethod(tavg_class, (t_method)tavg_help, gensym("help"), 0); zexy_register("tavg~"); } --- 42,85 ---- static t_int *tavg_perform(t_int *w) { ! t_sample *in = (t_sample *)(w[1]); ! t_tavgtilde *x = (t_tavgtilde *)w[2]; ! int n = (int)(w[3]); ! t_sample buf = x->buf;
! while (n--) buf += *in++; ! x->buf = buf; ! x->blocks++; ! return (w+4); }
static void tavg_dsp(t_tavgtilde *x, t_signal **sp) { ! x->n_inv=1./sp[0]->s_n; ! dsp_add(tavg_perform, 3, sp[0]->s_vec, x, sp[0]->s_n); }
static void *tavg_new(void) { ! t_tavgtilde *x = (t_tavgtilde *)pd_new(tavg_class); ! outlet_new(&x->x_obj, &s_float); ! return (x); }
static void tavg_help(void) { ! post("tavg~\t\t:: outputs the arithmetic mean of a signal when triggered"); ! post("<bang>\t\t: triggers the output"); }
void tavg_tilde_setup(void) { ! tavg_class = class_new(gensym("tavg~"), (t_newmethod)tavg_new, 0, ! sizeof(t_tavgtilde), 0, A_DEFFLOAT, 0); ! class_addmethod(tavg_class, nullfn, gensym("signal"), 0); ! class_addmethod(tavg_class, (t_method)tavg_dsp, gensym("dsp"), 0);
! class_addbang(tavg_class, tavg_bang);
! class_addmethod(tavg_class, (t_method)tavg_help, gensym("help"), 0); zexy_register("tavg~"); }
Index: pack~.c =================================================================== RCS file: /cvsroot/pure-data/externals/zexy/src/pack~.c,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** pack~.c 14 Mar 2007 09:08:56 -0000 1.4 --- pack~.c 30 Oct 2007 09:21:52 -0000 1.5 *************** *** 34,38 **** static t_int *sigpack_perform(t_int *w) { ! t_float *in = (t_float *)(w[1]); t_sigpack *x = (t_sigpack *)w[2]; int n = (int)(w[3]), i = 0; --- 34,38 ---- static t_int *sigpack_perform(t_int *w) { ! t_sample *in = (t_sample *)(w[1]); t_sigpack *x = (t_sigpack *)w[2]; int n = (int)(w[3]), i = 0; *************** *** 40,46 ****
while (n--) { ! SETFLOAT(&buf[i], *in++); i++; } outlet_list(x->x_obj.ob_outlet, &s_list, x->vector_length, x->buffer);
--- 40,49 ----
while (n--) { ! t_float f=*in++; ! SETFLOAT(&buf[i], f); i++; } + #warning defer list-output to next block with a clock! + outlet_list(x->x_obj.ob_outlet, &s_list, x->vector_length, x->buffer);
*************** *** 76,80 **** { sigpack_class = class_new(gensym("pack~"), (t_newmethod)sigpack_new, 0, ! sizeof(t_sigpack), 0, A_DEFFLOAT, 0); class_addmethod(sigpack_class, nullfn, gensym("signal"), 0); class_addmethod(sigpack_class, (t_method)sigpack_dsp, gensym("dsp"), 0); --- 79,83 ---- { sigpack_class = class_new(gensym("pack~"), (t_newmethod)sigpack_new, 0, ! sizeof(t_sigpack), 0, A_DEFFLOAT, 0); class_addmethod(sigpack_class, nullfn, gensym("signal"), 0); class_addmethod(sigpack_class, (t_method)sigpack_dsp, gensym("dsp"), 0);
Index: blockswap~.c =================================================================== RCS file: /cvsroot/pure-data/externals/zexy/src/blockswap~.c,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** blockswap~.c 14 Mar 2007 09:08:55 -0000 1.5 --- blockswap~.c 30 Oct 2007 09:21:51 -0000 1.6 *************** *** 30,34 **** int doit; int blocksize; ! t_float *blockbuffer; } t_blockswap;
--- 30,34 ---- int doit; int blocksize; ! t_sample *blockbuffer; } t_blockswap;
*************** *** 41,51 **** { t_blockswap *x = (t_blockswap *)(w[1]); ! t_float *in = (t_float *)(w[2]); ! t_float *out = (t_float *)(w[3]); int N = (int)(w[4]); int N2=N/2; if (x->doit) { int n=N2; ! t_float *dummy=x->blockbuffer; while(n--)*dummy++=*in++; n=N-N2; --- 41,51 ---- { t_blockswap *x = (t_blockswap *)(w[1]); ! t_sample *in = (t_sample *)(w[2]); ! t_sample *out = (t_sample *)(w[3]); int N = (int)(w[4]); int N2=N/2; if (x->doit) { int n=N2; ! t_sample *dummy=x->blockbuffer; while(n--)*dummy++=*in++; n=N-N2; *************** *** 61,67 **** { if (x->blocksize*2<sp[0]->s_n){ ! if(x->blockbuffer)freebytes(x->blockbuffer, sizeof(t_float)*x->blocksize); x->blocksize = sp[0]->s_n/2; ! x->blockbuffer = getbytes(sizeof(t_float)*x->blocksize); } dsp_add(blockswap_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n); --- 61,67 ---- { if (x->blocksize*2<sp[0]->s_n){ ! if(x->blockbuffer)freebytes(x->blockbuffer, sizeof(*x->blockbuffer)*x->blocksize); x->blocksize = sp[0]->s_n/2; ! x->blockbuffer = getbytes(sizeof(*x->blockbuffer)*x->blocksize); } dsp_add(blockswap_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n); *************** *** 79,83 **** { if(x->blockbuffer){ ! freebytes(x->blockbuffer, sizeof(t_float)*x->blocksize); } x->blockbuffer=0; --- 79,83 ---- { if(x->blockbuffer){ ! freebytes(x->blockbuffer, sizeof(*x->blockbuffer)*x->blocksize); } x->blockbuffer=0; *************** *** 96,100 **** { blockswap_class = class_new(gensym("blockswap~"), (t_newmethod)blockswap_new, 0, ! sizeof(t_blockswap), 0, A_NULL); class_addmethod(blockswap_class, nullfn, gensym("signal"), 0); class_addmethod(blockswap_class, (t_method)blockswap_dsp, gensym("dsp"), 0); --- 96,100 ---- { blockswap_class = class_new(gensym("blockswap~"), (t_newmethod)blockswap_new, 0, ! sizeof(t_blockswap), 0, A_NULL); class_addmethod(blockswap_class, nullfn, gensym("signal"), 0); class_addmethod(blockswap_class, (t_method)blockswap_dsp, gensym("dsp"), 0);
Index: absgn~.c =================================================================== RCS file: /cvsroot/pure-data/externals/zexy/src/absgn~.c,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** absgn~.c 14 Mar 2007 09:08:55 -0000 1.5 --- absgn~.c 30 Oct 2007 09:21:51 -0000 1.6 *************** *** 17,21 **** { t_object x_obj; ! float x_f; } t_absgn;
--- 17,21 ---- { t_object x_obj; ! t_float x_f; } t_absgn;
*************** *** 27,38 **** static t_int *sigABSGN_perform(t_int *w) { ! t_float *in = (t_float *)(w[1]); ! t_float *out = (t_float *)(w[2]); ! t_float *out2 = (t_float *)(w[3]); int n = (int)(w[4]);
while (n--) ! { ! t_float val = *in++; *out++ = fabsf(val);
--- 27,38 ---- static t_int *sigABSGN_perform(t_int *w) { ! t_sample *in = (t_sample *)(w[1]); ! t_sample *out = (t_sample *)(w[2]); ! t_sample *out2 = (t_sample *)(w[3]); int n = (int)(w[4]);
while (n--) ! { ! t_sample val = *in++; *out++ = fabsf(val);
*************** *** 40,44 **** else if (val<0.) *out2++=-1.; else *out2++=0.; ! }
--- 40,44 ---- else if (val<0.) *out2++=-1.; else *out2++=0.; ! }
*************** *** 95,99 **** Z_SIMD_CHKALIGN(sp[0]->s_vec)&& Z_SIMD_CHKALIGN(sp[1]->s_vec)&& ! Z_SIMD_CHKALIGN(sp[2]->s_vec) ) { --- 95,100 ---- Z_SIMD_CHKALIGN(sp[0]->s_vec)&& Z_SIMD_CHKALIGN(sp[1]->s_vec)&& ! Z_SIMD_CHKALIGN(sp[2]->s_vec)&& ! ZEXY_TYPE_EQUAL(t_sample, float) ) { *************** *** 126,130 **** { sigABSGN_class = class_new(gensym("absgn~"), (t_newmethod)sigABSGN_new, 0, ! sizeof(t_absgn), 0, A_DEFFLOAT, 0); CLASS_MAINSIGNALIN(sigABSGN_class, t_absgn, x_f); class_addmethod(sigABSGN_class, (t_method)sigABSGN_dsp, gensym("dsp"), 0); --- 127,131 ---- { sigABSGN_class = class_new(gensym("absgn~"), (t_newmethod)sigABSGN_new, 0, ! sizeof(t_absgn), 0, A_DEFFLOAT, 0); CLASS_MAINSIGNALIN(sigABSGN_class, t_absgn, x_f); class_addmethod(sigABSGN_class, (t_method)sigABSGN_dsp, gensym("dsp"), 0);
Index: blockmirror~.c =================================================================== RCS file: /cvsroot/pure-data/externals/zexy/src/blockmirror~.c,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** blockmirror~.c 14 Mar 2007 09:08:55 -0000 1.5 --- blockmirror~.c 30 Oct 2007 09:21:51 -0000 1.6 *************** *** 34,38 **** int doit; int blocksize; ! t_float *blockbuffer; } t_blockmirror;
--- 34,38 ---- int doit; int blocksize; ! t_sample *blockbuffer; } t_blockmirror;
*************** *** 45,55 **** { t_blockmirror *x = (t_blockmirror *)(w[1]); ! t_float *in = (t_float *)(w[2]); ! t_float *out = (t_float *)(w[3]); int n = (int)(w[4]); if (x->doit) { if (in==out){ int N=n; ! t_float *dummy=x->blockbuffer; while(n--)*dummy++=*in++; dummy--; --- 45,55 ---- { t_blockmirror *x = (t_blockmirror *)(w[1]); ! t_sample *in = (t_sample *)(w[2]); ! t_sample *out = (t_sample *)(w[3]); int n = (int)(w[4]); if (x->doit) { if (in==out){ int N=n; ! t_sample *dummy=x->blockbuffer; while(n--)*dummy++=*in++; dummy--; *************** *** 66,72 **** { if (x->blocksize<sp[0]->s_n){ ! if(x->blockbuffer)freebytes(x->blockbuffer, sizeof(t_float)*x->blocksize); x->blocksize = sp[0]->s_n; ! x->blockbuffer = getbytes(sizeof(t_float)*x->blocksize); } dsp_add(blockmirror_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n); --- 66,72 ---- { if (x->blocksize<sp[0]->s_n){ ! if(x->blockbuffer)freebytes(x->blockbuffer, sizeof(*x->blockbuffer)*x->blocksize); x->blocksize = sp[0]->s_n; ! x->blockbuffer = getbytes(sizeof(*x->blockbuffer)*x->blocksize); } dsp_add(blockmirror_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n); *************** *** 83,87 **** { if(x->blockbuffer) ! freebytes(x->blockbuffer, sizeof(t_float)*x->blocksize); x->blockbuffer=0; } --- 83,87 ---- { if(x->blockbuffer) ! freebytes(x->blockbuffer, sizeof(*x->blockbuffer)*x->blocksize); x->blockbuffer=0; }
Index: quantize~.c =================================================================== RCS file: /cvsroot/pure-data/externals/zexy/src/quantize~.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** quantize~.c 14 Mar 2007 09:08:56 -0000 1.6 --- quantize~.c 30 Oct 2007 09:21:52 -0000 1.7 *************** *** 31,75 **** typedef struct _quantize { ! t_object x_obj; ! t_float quantiz, dequantiz; } t_quantize;
static void quantize_float(t_quantize *x, t_floatarg f) { ! x->quantiz = f; ! x->dequantiz = 1./f; }
static void quantize_16bit(t_quantize *x) { ! x->quantiz = 32768.; ! x->dequantiz = 1./32768.; }
static void quantize_8bit(t_quantize *x) { ! x->quantiz = 128.; ! x->dequantiz = 1./128.; }
static t_int *quantize_perform(t_int *w) { ! t_quantize *x = (t_quantize *)(w[1]); ! t_float *in = (t_float *)(w[2]); ! t_float *out = (t_float *)(w[3]); ! int n = (int)(w[4]);
! t_float quantiz = x->quantiz, dequantiz = x->dequantiz;
! if (quantiz) ! while (n--) *out++ = dequantiz*(int)(quantiz**in++); ! else while (n--) *out++ = *in++;
! return (w+5); }
static void quantize_dsp(t_quantize *x, t_signal **sp) { ! dsp_add(quantize_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n); }
--- 31,75 ---- typedef struct _quantize { ! t_object x_obj; ! t_sample quantiz, dequantiz; } t_quantize;
static void quantize_float(t_quantize *x, t_floatarg f) { ! x->quantiz = f; ! x->dequantiz = 1./f; }
static void quantize_16bit(t_quantize *x) { ! x->quantiz = 32768.; ! x->dequantiz = 1./32768.; }
static void quantize_8bit(t_quantize *x) { ! x->quantiz = 128.; ! x->dequantiz = 1./128.; }
static t_int *quantize_perform(t_int *w) { ! t_quantize *x = (t_quantize *)(w[1]); ! t_sample *in = (t_sample *)(w[2]); ! t_sample *out = (t_sample *)(w[3]); ! int n = (int)(w[4]);
! t_sample quantiz = x->quantiz, dequantiz = x->dequantiz;
! if (quantiz) ! while (n--) *out++ = dequantiz*(int)(quantiz**in++); ! else while (n--) *out++ = *in++;
! return (w+5); }
static void quantize_dsp(t_quantize *x, t_signal **sp) { ! dsp_add(quantize_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n); }
*************** *** 77,88 **** { ZEXY_USEVAR(x); ! post("%c quantize~-object\t:: used for quantizing signals by various degrees", HEARTSYMBOL); ! post("<quants> : quantize a signal into <quants> steps ('0' turns quantizing off)\n" ! "'8bit' : quantize to 8 bit\n" ! "'16bit' : quantize to 16 bit (default)\n" ! "'float' : pass-through the signal unchanged\n" ! "'help' : view this\n" ! "signal~\n"); ! post("creation:: "quantize~ [<quants>]"");
} --- 77,88 ---- { ZEXY_USEVAR(x); ! post("%c quantize~-object\t:: used for quantizing signals by various degrees", HEARTSYMBOL); ! post("<quants> : quantize a signal into <quants> steps ('0' turns quantizing off)\n" ! "'8bit' : quantize to 8 bit\n" ! "'16bit' : quantize to 16 bit (default)\n" ! "'float' : pass-through the signal unchanged\n" ! "'help' : view this\n" ! "signal~\n"); ! post("creation:: "quantize~ [<quants>]"");
} *************** *** 90,99 **** static void *quantize_new(t_floatarg f) { ! t_quantize *x = (t_quantize *)pd_new(quantize_class); ! outlet_new(&x->x_obj, gensym("signal")); ! if (f) quantize_float(x, f); ! else quantize_16bit(x); ! return (x); }
--- 90,99 ---- static void *quantize_new(t_floatarg f) { ! t_quantize *x = (t_quantize *)pd_new(quantize_class); ! outlet_new(&x->x_obj, gensym("signal")); ! if (f) quantize_float(x, f); ! else quantize_16bit(x); ! return (x); }
Index: z~.c =================================================================== RCS file: /cvsroot/pure-data/externals/zexy/src/z~.c,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** z~.c 14 Mar 2007 09:08:56 -0000 1.5 --- z~.c 30 Oct 2007 09:21:52 -0000 1.6 *************** *** 16,24 ****
/* ! here we do some sample-wise delay, so you can do your own FIR-filter-designs ! here are :: "z^(-1)", "z^(-N)" ! to do :: a "lattice~" section ...
! 1302:forum::für::umläute:2000 */
--- 16,24 ----
/* ! here we do some sample-wise delay, so you can do your own FIR-filter-designs ! here are :: "z^(-1)", "z^(-N)" ! to do :: a "lattice~" section ...
! 1302:forum::für::umläute:2000 */
*************** *** 33,37 **** t_object x_obj;
! t_float *buf; int bufsize, phase;
--- 33,37 ---- t_object x_obj;
! t_sample *buf; int bufsize, phase;
*************** *** 43,49 **** if (i<1)i=1; if (i==x->bufsize)return; ! freebytes(x->buf, x->bufsize*sizeof(t_float)); x->bufsize=i; ! x->buf=(t_float *)getbytes(x->bufsize*sizeof(t_float)); x->phase=0; } --- 43,49 ---- if (i<1)i=1; if (i==x->bufsize)return; ! freebytes(x->buf, x->bufsize*sizeof(t_sample)); x->bufsize=i; ! x->buf=(t_sample *)getbytes(x->bufsize*sizeof(t_sample)); x->phase=0; } *************** *** 51,60 **** static t_int *zN_perform(t_int *w) { ! t_float *in = (t_float *)(w[1]); ! t_float *out = (t_float *)(w[2]); t_zNdelay *x = (t_zNdelay *)(w[3]); int n = (int)(w[4]);
! t_float *buf = x->buf; int bufsize=x->bufsize, ph=x->phase;
--- 51,60 ---- static t_int *zN_perform(t_int *w) { ! t_sample *in = (t_sample *)(w[1]); ! t_sample *out = (t_sample *)(w[2]); t_zNdelay *x = (t_zNdelay *)(w[3]); int n = (int)(w[4]);
! t_sample *buf = x->buf; int bufsize=x->bufsize, ph=x->phase;
*************** *** 62,66 **** if (in!=out)while(n--)*out++=*in++; } else if (bufsize==2) { ! register t_float f, last=*buf; while(n--){ f=*in++; --- 62,66 ---- if (in!=out)while(n--)*out++=*in++; } else if (bufsize==2) { ! register t_sample f, last=*buf; while(n--){ f=*in++; *************** *** 89,93 **** t_zNdelay *x = (t_zNdelay *)pd_new(zNdelay_class); int i = f; ! t_float *b;
if (i<=0) i=1; --- 89,93 ---- t_zNdelay *x = (t_zNdelay *)pd_new(zNdelay_class); int i = f; ! t_sample *b;
if (i<=0) i=1; *************** *** 95,99 ****
x->bufsize = i; ! x->buf = (t_float *)getbytes(sizeof(t_float) * x->bufsize); b=x->buf; while (i--) { --- 95,99 ----
x->bufsize = i; ! x->buf = (t_sample *)getbytes(sizeof(t_sample) * x->bufsize); b=x->buf; while (i--) { *************** *** 109,113 **** static void zNdelay_free(t_zNdelay *x) { ! freebytes(x->buf, sizeof(t_float) * x->bufsize); }
--- 109,113 ---- static void zNdelay_free(t_zNdelay *x) { ! freebytes(x->buf, sizeof(t_sample) * x->bufsize); }
Index: pdf~.c =================================================================== RCS file: /cvsroot/pure-data/externals/zexy/src/pdf~.c,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** pdf~.c 14 Mar 2007 09:08:56 -0000 1.5 --- pdf~.c 30 Oct 2007 09:21:52 -0000 1.6 *************** *** 69,73 **** static t_int *pdf_perform(t_int *w) { ! t_float *in = (t_float *)(w[1]); t_pdf *x = (t_pdf *)(w[2]); int n = (int)(w[3]); --- 69,73 ---- static t_int *pdf_perform(t_int *w) { ! t_sample *in = (t_sample *)(w[1]); t_pdf *x = (t_pdf *)(w[2]); int n = (int)(w[3]); *************** *** 78,82 **** while (n--) { ! t_float f = *in++; int iindex = ((f + 1.0) * halfsize)+0.5; buf[(iindex<0)?0:((iindex>=x->size)?x->size-1:iindex)]+=1.; --- 78,82 ---- while (n--) { ! t_sample f = *in++; int iindex = ((f + 1.0) * halfsize)+0.5; buf[(iindex<0)?0:((iindex>=x->size)?x->size-1:iindex)]+=1.; *************** *** 99,103 ****
x->size = (i)?i:64; ! x->buf = (t_float *)getbytes(x->size * sizeof(t_float)); buf = x->buf; clear_pdfbuf(x); --- 99,103 ----
x->size = (i)?i:64; ! x->buf = (t_float *)getbytes(x->size * sizeof(*x->buf)); buf = x->buf; clear_pdfbuf(x); *************** *** 110,124 **** static void pdf_free(t_pdf *x) { ! freebytes(x->buf, x->size*sizeof(t_float)); }
static void pdf_tilde_helper(void) { ! post("\n%c pdf~\t:: get the probability density function of a signal (-1.0 to +1.0)", HEARTSYMBOL); ! post("'bang'\t : output a list of the probabilities of 'n' function values" ! "\n'clear'\t : clear the buffer (set all probabilities to zero)" ! "\n<1/0>\t : short for 'bang' and 'clear'" ! "\n'help'\t : view this"); ! post("creation :: 'pdf~ [<n>]':: get the pdf for <n> (default: 64) values"); }
--- 110,125 ---- static void pdf_free(t_pdf *x) { ! if(x->buf) ! freebytes(x->buf, x->size*sizeof(*x->buf)); }
static void pdf_tilde_helper(void) { ! post("\n%c pdf~\t:: get the probability density function of a signal (-1.0 to +1.0)", HEARTSYMBOL); ! post("'bang'\t : output a list of the probabilities of 'n' function values" ! "\n'clear'\t : clear the buffer (set all probabilities to zero)" ! "\n<1/0>\t : short for 'bang' and 'clear'" ! "\n'help'\t : view this"); ! post("creation :: 'pdf~ [<n>]':: get the pdf for <n> (default: 64) values"); }
Index: avg~.c =================================================================== RCS file: /cvsroot/pure-data/externals/zexy/src/avg~.c,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** avg~.c 14 Mar 2007 09:08:55 -0000 1.5 --- avg~.c 30 Oct 2007 09:21:51 -0000 1.6 *************** *** 25,33 **** typedef struct _avg { ! t_object x_obj;
! t_float n_inv; ! t_float buf; ! int blocks; } t_avg;
--- 25,32 ---- typedef struct _avg { ! t_object x_obj;
! t_float n_inv; ! int blocks; } t_avg;
*************** *** 37,72 **** static t_int *avg_perform(t_int *w) { ! t_float *in = (t_float *)(w[1]);
! t_avg *x = (t_avg *)w[2]; ! int n = (int)(w[3]);
! t_float buf = 0.;
! while (n--) { ! buf += *in++; } ! outlet_float(x->x_obj.ob_outlet, buf*x->n_inv);
! return (w+4); }
static void avg_dsp(t_avg *x, t_signal **sp) { ! x->n_inv=1./sp[0]->s_n; ! dsp_add(avg_perform, 3, sp[0]->s_vec, x, sp[0]->s_n); }
static void *avg_new(void) { ! t_avg *x = (t_avg *)pd_new(avg_class); ! outlet_new(&x->x_obj, gensym("float")); ! return (x); }
static void avg_help(void) { ! post("avg~\t:: outputs the arithmetic mean of each signal-vector"); }
--- 36,71 ---- static t_int *avg_perform(t_int *w) { ! t_sample *in = (t_sample *)(w[1]);
! t_avg *x = (t_avg *)w[2]; ! int n = (int)(w[3]);
! t_sample buf = 0.;
! while (n--) { ! buf += *in++; } ! outlet_float(x->x_obj.ob_outlet, buf*x->n_inv);
! return (w+4); }
static void avg_dsp(t_avg *x, t_signal **sp) { ! x->n_inv=1./sp[0]->s_n; ! dsp_add(avg_perform, 3, sp[0]->s_vec, x, sp[0]->s_n); }
static void *avg_new(void) { ! t_avg *x = (t_avg *)pd_new(avg_class); ! outlet_new(&x->x_obj, &s_float); ! return (x); }
static void avg_help(void) { ! post("avg~\t:: outputs the arithmetic mean of each signal-vector"); }
*************** *** 74,83 **** void avg_tilde_setup(void) { ! avg_class = class_new(gensym("avg~"), (t_newmethod)avg_new, 0, ! sizeof(t_avg), 0, A_DEFFLOAT, 0); ! class_addmethod(avg_class, nullfn, gensym("signal"), 0); ! class_addmethod(avg_class, (t_method)avg_dsp, gensym("dsp"), 0);
! class_addmethod(avg_class, (t_method)avg_help, gensym("help"), 0); zexy_register("avg~"); } --- 73,82 ---- void avg_tilde_setup(void) { ! avg_class = class_new(gensym("avg~"), (t_newmethod)avg_new, 0, ! sizeof(t_avg), 0, A_DEFFLOAT, 0); ! class_addmethod(avg_class, nullfn, gensym("signal"), 0); ! class_addmethod(avg_class, (t_method)avg_dsp, gensym("dsp"), 0);
! class_addmethod(avg_class, (t_method)avg_help, gensym("help"), 0); zexy_register("avg~"); }
Index: sigzero~.c =================================================================== RCS file: /cvsroot/pure-data/externals/zexy/src/sigzero~.c,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** sigzero~.c 14 Mar 2007 09:08:56 -0000 1.7 --- sigzero~.c 30 Oct 2007 09:21:52 -0000 1.8 *************** *** 16,21 **** /* ------------------------ sigzero~ ----------------------------- */ /* ! a very useful function, which detects, whether a signal is zeroes-only this block or not ! this is really great together with the "switch~"-object */
--- 16,21 ---- /* ------------------------ sigzero~ ----------------------------- */ /* ! a very useful function, which detects, whether a signal is zeroes-only this block or not ! this is really great together with the "switch~"-object */
*************** *** 27,89 **** typedef struct _sigzero { ! t_object x_obj; ! int activate; ! int current; /* 0 == (signalblock == 0); 1==(signalblock != 0) */ } t_sigzero;
static void sigzero_activate(t_sigzero *x, t_floatarg activate) { ! x->activate = (activate)?1:0; }
static void sigzero_banged(t_sigzero *x) { ! x->activate = 1; }
static void sigzero_off(t_sigzero *x) { ! x->activate = 0; }
static t_int *sigzero_perform(t_int *w) { ! t_float *in = (t_float *)w[1]; ! t_sigzero *x = (t_sigzero *)w[2]; ! int n = (int)w[3];
! int non_zero = 0;
! if (x->activate) { ! while (n--) ! { ! if (*in++ != 0.) { ! non_zero = 1; ! break; ! } ! } ! if (non_zero != x->current) { ! outlet_float(x->x_obj.ob_outlet, x->current = non_zero); ! } ! // else post("non_zero=%d\tcurrent=%d", non_zero, x->current); ! }
! return (w+4); }
static void sigzero_dsp(t_sigzero *x, t_signal **sp) { ! dsp_add(sigzero_perform, 3, sp[0]->s_vec, x, sp[0]->s_n); }
static void sigzero_tilde_helper(void) { ! post("\n%c sigzero~-object :: for detecting whether a signal is currently zero or not", HEARTSYMBOL); ! post("'bang'\t: turn the detector on\n" ! "'off'\t: turn it off\n" ! "<1/0>\t: turn it on/off\n" ! "'help'\t: view this\n" ! "signal~"); ! post("outlet :: 1/0\t: signal turned to non-zero/zero\n"); }
--- 27,88 ---- typedef struct _sigzero { ! t_object x_obj; ! int activate; ! int current; /* 0 == (signalblock == 0); 1==(signalblock != 0) */ } t_sigzero;
static void sigzero_activate(t_sigzero *x, t_floatarg activate) { ! x->activate = (activate)?1:0; }
static void sigzero_banged(t_sigzero *x) { ! x->activate = 1; }
static void sigzero_off(t_sigzero *x) { ! x->activate = 0; }
static t_int *sigzero_perform(t_int *w) { ! t_sample *in = (t_sample *)w[1]; ! t_sigzero *x = (t_sigzero *)w[2]; ! int n = (int)w[3];
! int non_zero = 0;
! if (x->activate) { ! while (n--) ! { ! if (*in++ != 0.) { ! non_zero = 1; ! break; ! } ! } ! if (non_zero != x->current) { ! outlet_float(x->x_obj.ob_outlet, x->current = non_zero); ! } ! }
! return (w+4); }
static void sigzero_dsp(t_sigzero *x, t_signal **sp) { ! dsp_add(sigzero_perform, 3, sp[0]->s_vec, x, sp[0]->s_n); }
static void sigzero_tilde_helper(void) { ! post("\n%c sigzero~-object :: for detecting whether a signal is currently zero or not", HEARTSYMBOL); ! post("'bang'\t: turn the detector on\n" ! "'off'\t: turn it off\n" ! "<1/0>\t: turn it on/off\n" ! "'help'\t: view this\n" ! "signal~"); ! post("outlet :: 1/0\t: signal turned to non-zero/zero\n"); }
*************** *** 97,110 **** void sigzero_tilde_setup(void) { ! sigzero_class = class_new(gensym("sigzero~"), (t_newmethod)sigzero_new, 0, ! sizeof(t_sigzero), 0, 0); ! class_addfloat(sigzero_class, sigzero_activate); ! class_addbang(sigzero_class, sigzero_banged); ! class_addmethod(sigzero_class, (t_method)sigzero_off, gensym("off"), 0);
! class_addmethod(sigzero_class, nullfn, gensym("signal"), 0); ! class_addmethod(sigzero_class, (t_method)sigzero_dsp, gensym("dsp"), 0);
! class_addmethod(sigzero_class, (t_method)sigzero_tilde_helper, gensym("help"), 0); zexy_register("sigzero~"); } --- 96,109 ---- void sigzero_tilde_setup(void) { ! sigzero_class = class_new(gensym("sigzero~"), (t_newmethod)sigzero_new, 0, ! sizeof(t_sigzero), 0, 0); ! class_addfloat(sigzero_class, sigzero_activate); ! class_addbang(sigzero_class, sigzero_banged); ! class_addmethod(sigzero_class, (t_method)sigzero_off, gensym("off"), 0);
! class_addmethod(sigzero_class, nullfn, gensym("signal"), 0); ! class_addmethod(sigzero_class, (t_method)sigzero_dsp, gensym("dsp"), 0);
! class_addmethod(sigzero_class, (t_method)sigzero_tilde_helper, gensym("help"), 0); zexy_register("sigzero~"); }
Index: envrms~.c =================================================================== RCS file: /cvsroot/pure-data/externals/zexy/src/envrms~.c,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** envrms~.c 14 Mar 2007 09:08:56 -0000 1.5 --- envrms~.c 30 Oct 2007 09:21:52 -0000 1.6 *************** *** 28,41 **** typedef struct sigenvrms { ! t_object x_obj; /* header */ ! void *x_outlet; /* a "float" outlet */ ! void *x_clock; /* a "clock" object */ ! float *x_buf; /* a Hanning window */ ! int x_phase; /* number of points since last output */ ! int x_period; /* requested period of output */ ! int x_realperiod; /* period rounded up to vecsize multiple */ ! int x_npoints; /* analysis window size in samples */ ! float x_result; /* result to output */ ! float x_sumbuf[MAXOVERLAP]; /* summing buffer */ } t_sigenvrms;
--- 28,41 ---- typedef struct sigenvrms { ! t_object x_obj; /* header */ ! void *x_outlet; /* a "float" outlet */ ! void *x_clock; /* a "clock" object */ ! t_sample *x_buf; /* a Hanning window */ ! int x_phase; /* number of points since last output */ ! int x_period; /* requested period of output */ ! int x_realperiod; /* period rounded up to vecsize multiple */ ! int x_npoints; /* analysis window size in samples */ ! t_float x_result; /* result to output */ ! t_sample x_sumbuf[MAXOVERLAP]; /* summing buffer */ } t_sigenvrms;
*************** *** 44,137 **** static void *sigenvrms_new(t_floatarg fnpoints, t_floatarg fperiod) { ! int npoints = fnpoints; ! int period = fperiod; ! t_sigenvrms *x; ! float *buf; ! int i;
! if (npoints < 1) npoints = 1024; ! if (period < 1) period = npoints/2; ! if (period < npoints / MAXOVERLAP + 1) ! period = npoints / MAXOVERLAP + 1; ! if (!(buf = getbytes(sizeof(float) * (npoints + MAXVSTAKEN)))) { ! error("env: couldn't allocate buffer"); ! return (0); } ! x = (t_sigenvrms *)pd_new(sigenvrms_class); ! x->x_buf = buf; ! x->x_npoints = npoints; ! x->x_phase = 0; ! x->x_period = period; ! for (i = 0; i < MAXOVERLAP; i++) x->x_sumbuf[i] = 0; ! for (i = 0; i < npoints; i++) ! buf[i] = (1. - cos((2 * 3.141592654 * i) / npoints))/npoints; ! for (; i < npoints+MAXVSTAKEN; i++) buf[i] = 0; ! x->x_clock = clock_new(x, (t_method)sigenvrms_tick); ! x->x_outlet = outlet_new(&x->x_obj, gensym("float")); ! return (x); }
static t_int *sigenvrms_perform(t_int *w) { ! t_sigenvrms *x = (t_sigenvrms *)(w[1]); ! t_float *in = (t_float *)(w[2]); ! int n = (int)(w[3]); ! int count; ! float *sump; ! in += n; ! for (count = x->x_phase, sump = x->x_sumbuf; ! count < x->x_npoints; count += x->x_realperiod, sump++) { ! float *hp = x->x_buf + count; ! float *fp = in; ! float sum = *sump; ! int i; ! for (i = 0; i < n; i++) { ! fp--; ! sum += *hp++ * (*fp * *fp); } ! *sump = sum; } ! sump[0] = 0; ! x->x_phase -= n; ! if (x->x_phase < 0) { ! x->x_result = x->x_sumbuf[0]; ! for (count = x->x_realperiod, sump = x->x_sumbuf; ! count < x->x_npoints; count += x->x_realperiod, sump++) ! sump[0] = sump[1]; ! sump[0] = 0; ! x->x_phase = x->x_realperiod - n; ! clock_delay(x->x_clock, 0L); } ! return (w+4); }
static void sigenvrms_dsp(t_sigenvrms *x, t_signal **sp) { ! if (x->x_period % sp[0]->s_n) x->x_realperiod = ! x->x_period + sp[0]->s_n - (x->x_period % sp[0]->s_n); ! else x->x_realperiod = x->x_period; ! dsp_add(sigenvrms_perform, 3, x, sp[0]->s_vec, sp[0]->s_n); ! if (sp[0]->s_n > MAXVSTAKEN) bug("sigenvrms_dsp"); }
static void sigenvrms_tick(t_sigenvrms *x) /* callback function for the clock */ { ! outlet_float(x->x_outlet, sqrtf(x->x_result)); }
static void sigenvrms_ff(t_sigenvrms *x) /* cleanup on free */ { ! clock_free(x->x_clock); ! freebytes(x->x_buf, (x->x_npoints + MAXVSTAKEN) * sizeof(float)); }
static void sigenvrms_help(void) { ! post("envrms~\t:: envelope follower that does output rms instead of dB"); }
--- 44,137 ---- static void *sigenvrms_new(t_floatarg fnpoints, t_floatarg fperiod) { ! int npoints = fnpoints; ! int period = fperiod; ! t_sigenvrms *x; ! t_sample *buf; ! int i;
! if (npoints < 1) npoints = 1024; ! if (period < 1) period = npoints/2; ! if (period < npoints / MAXOVERLAP + 1) ! period = npoints / MAXOVERLAP + 1; ! if (!(buf = getbytes(sizeof(*buf) * (npoints + MAXVSTAKEN)))) { ! error("env: couldn't allocate buffer"); ! return (0); } ! x = (t_sigenvrms *)pd_new(sigenvrms_class); ! x->x_buf = buf; ! x->x_npoints = npoints; ! x->x_phase = 0; ! x->x_period = period; ! for (i = 0; i < MAXOVERLAP; i++) x->x_sumbuf[i] = 0; ! for (i = 0; i < npoints; i++) ! buf[i] = (1. - cos((2 * 3.141592654 * i) / npoints))/npoints; ! for (; i < npoints+MAXVSTAKEN; i++) buf[i] = 0; ! x->x_clock = clock_new(x, (t_method)sigenvrms_tick); ! x->x_outlet = outlet_new(&x->x_obj, &s_float); ! return (x); }
static t_int *sigenvrms_perform(t_int *w) { ! t_sigenvrms *x = (t_sigenvrms *)(w[1]); ! t_sample *in = (t_sample *)(w[2]); ! int n = (int)(w[3]); ! int count; ! t_sample *sump; ! in += n; ! for (count = x->x_phase, sump = x->x_sumbuf; ! count < x->x_npoints; count += x->x_realperiod, sump++) { ! t_sample *hp = x->x_buf + count; ! t_sample *fp = in; ! t_sample sum = *sump; ! int i; ! for (i = 0; i < n; i++) { ! fp--; ! sum += *hp++ * (*fp * *fp); } ! *sump = sum; } ! sump[0] = 0; ! x->x_phase -= n; ! if (x->x_phase < 0) { ! x->x_result = x->x_sumbuf[0]; ! for (count = x->x_realperiod, sump = x->x_sumbuf; ! count < x->x_npoints; count += x->x_realperiod, sump++) ! sump[0] = sump[1]; ! sump[0] = 0; ! x->x_phase = x->x_realperiod - n; ! clock_delay(x->x_clock, 0L); } ! return (w+4); }
static void sigenvrms_dsp(t_sigenvrms *x, t_signal **sp) { ! if (x->x_period % sp[0]->s_n) x->x_realperiod = ! x->x_period + sp[0]->s_n - (x->x_period % sp[0]->s_n); ! else x->x_realperiod = x->x_period; ! dsp_add(sigenvrms_perform, 3, x, sp[0]->s_vec, sp[0]->s_n); ! if (sp[0]->s_n > MAXVSTAKEN) bug("sigenvrms_dsp"); }
static void sigenvrms_tick(t_sigenvrms *x) /* callback function for the clock */ { ! outlet_float(x->x_outlet, sqrtf(x->x_result)); }
static void sigenvrms_ff(t_sigenvrms *x) /* cleanup on free */ { ! clock_free(x->x_clock); ! freebytes(x->x_buf, (x->x_npoints + MAXVSTAKEN) * sizeof(*x->x_buf)); }
static void sigenvrms_help(void) { ! post("envrms~\t:: envelope follower that does output rms instead of dB"); }
*************** *** 139,148 **** void envrms_tilde_setup(void) { ! sigenvrms_class = class_new(gensym("envrms~"), (t_newmethod)sigenvrms_new, ! (t_method)sigenvrms_ff, sizeof(t_sigenvrms), 0, A_DEFFLOAT, A_DEFFLOAT, 0); ! class_addmethod(sigenvrms_class, nullfn, gensym("signal"), 0); ! class_addmethod(sigenvrms_class, (t_method)sigenvrms_dsp, gensym("dsp"), 0);
! class_addmethod(sigenvrms_class, (t_method)sigenvrms_help, gensym("help"), 0); zexy_register("envrms~"); } --- 139,148 ---- void envrms_tilde_setup(void) { ! sigenvrms_class = class_new(gensym("envrms~"), (t_newmethod)sigenvrms_new, ! (t_method)sigenvrms_ff, sizeof(t_sigenvrms), 0, A_DEFFLOAT, A_DEFFLOAT, 0); ! class_addmethod(sigenvrms_class, nullfn, gensym("signal"), 0); ! class_addmethod(sigenvrms_class, (t_method)sigenvrms_dsp, gensym("dsp"), 0);
! class_addmethod(sigenvrms_class, (t_method)sigenvrms_help, gensym("help"), 0); zexy_register("envrms~"); }
Index: abs~.c =================================================================== RCS file: /cvsroot/pure-data/externals/zexy/src/abs~.c,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** abs~.c 14 Mar 2007 09:08:55 -0000 1.4 --- abs~.c 30 Oct 2007 09:21:51 -0000 1.5 *************** *** 26,30 **** { t_object x_obj; ! float x_f; } t_abs;
--- 26,30 ---- { t_object x_obj; ! t_float x_f; } t_abs;
*************** *** 36,41 **** static t_int *sigABS_perform(t_int *w) { ! t_float *in = (t_float *)(w[1]); ! t_float *out = (t_float *)(w[2]); int n = (int)(w[3]);
--- 36,41 ---- static t_int *sigABS_perform(t_int *w) { ! t_sample *in = (t_sample *)(w[1]); ! t_sample *out = (t_sample *)(w[2]); int n = (int)(w[3]);
*************** *** 72,76 **** * but still about 4* as fast as the generic code * i prefer using intrinsics as i don't have to learn how to ! * assemble */ asm( --- 72,76 ---- * but still about 4* as fast as the generic code * i prefer using intrinsics as i don't have to learn how to ! * assembler */ asm( *************** *** 120,129 **** static void sigABS_dsp(t_abs *x, t_signal **sp) { - ZEXY_USEVAR(x); #ifdef __SSE__ if( Z_SIMD_CHKBLOCKSIZE(sp[0]->s_n)&& Z_SIMD_CHKALIGN(sp[0]->s_vec)&& ! Z_SIMD_CHKALIGN(sp[1]->s_vec)) { dsp_add(sigABS_performSSE, 3, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n); --- 120,130 ---- static void sigABS_dsp(t_abs *x, t_signal **sp) { #ifdef __SSE__ if( Z_SIMD_CHKBLOCKSIZE(sp[0]->s_n)&& Z_SIMD_CHKALIGN(sp[0]->s_vec)&& ! Z_SIMD_CHKALIGN(sp[1]->s_vec)&& ! ZEXY_TYPE_EQUAL(t_sample, float) ! ) { dsp_add(sigABS_performSSE, 3, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n);
Index: blockshuffle~.c =================================================================== RCS file: /cvsroot/pure-data/externals/zexy/src/blockshuffle~.c,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** blockshuffle~.c 14 Mar 2007 09:08:55 -0000 1.3 --- blockshuffle~.c 30 Oct 2007 09:21:51 -0000 1.4 *************** *** 68,72 **** } x->shufflesize=argc; ! x->shuffle=getbytes(sizeof(t_float)*argc);
for(i=0; i<argc; i++){ --- 68,72 ---- } x->shufflesize=argc; ! x->shuffle=getbytes(sizeof(*x->shuffle)*argc);
for(i=0; i<argc; i++){ *************** *** 87,97 ****
if(idx){ ! for(i=0; i<n; i++){ ! temp[i]=in[idx[i]]; ! } ! temp=x->blockbuf; ! for(i=0; i<n; i++){ ! *out++=*temp++; ! } } else while(n--)*out++=*in++; --- 87,97 ----
if(idx){ ! for(i=0; i<n; i++){ ! temp[i]=in[idx[i]]; ! } ! temp=x->blockbuf; ! for(i=0; i<n; i++){ ! *out++=*temp++; ! } } else while(n--)*out++=*in++; *************** *** 115,121 **** } static void blockshuffle_free(t_blockshuffle *x){ ! if(x->indices) freebytes(x->indices, sizeof(t_int) *x->size); ! if(x->blockbuf)freebytes(x->blockbuf, sizeof(t_sample)*x->size); ! if(x->shuffle) freebytes(x->shuffle, sizeof(t_float) *x->shufflesize); }
--- 115,121 ---- } static void blockshuffle_free(t_blockshuffle *x){ ! if(x->indices) freebytes(x->indices, sizeof(*x->indices) *x->size); ! if(x->blockbuf)freebytes(x->blockbuf, sizeof(*x->blockbuf)*x->size); ! if(x->shuffle) freebytes(x->shuffle, sizeof(*x->shuffle) *x->shufflesize); }
Index: sgn~.c =================================================================== RCS file: /cvsroot/pure-data/externals/zexy/src/sgn~.c,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** sgn~.c 14 Mar 2007 09:08:56 -0000 1.7 --- sgn~.c 30 Oct 2007 09:21:52 -0000 1.8 *************** *** 35,42 **** static t_int *sgnTilde_perform(t_int *w) { ! t_float *in = (t_float *)(w[1]); ! t_float *out = (t_float *)(w[2]); int n = (int)(w[3]); ! t_float x; while (n--) { if ((x=*in++)>0.) *out++=1.; --- 35,42 ---- static t_int *sgnTilde_perform(t_int *w) { ! t_sample *in = (t_sample *)(w[1]); ! t_sample *out = (t_sample *)(w[2]); int n = (int)(w[3]); ! t_sample x; while (n--) { if ((x=*in++)>0.) *out++=1.; *************** *** 49,71 **** static t_int *sgnTilde_perform8(t_int *w) { ! t_float *in = (t_float *)(w[1]); ! t_float *out = (t_float *)(w[2]); int n = (int)(w[3])>>3; ! t_float x;
! while(n--){ ! /* weirdly enough, the if/else/if/else is a lot faster than ()?:(()?:) */ ! if ((x=in[0])>0.) out[0]=1.; else if(x<0.) out[0]=-1.; else out[0]=0.; ! if ((x=in[1])>0.) out[1]=1.; else if(x<0.) out[1]=-1.; else out[1]=0.; ! if ((x=in[2])>0.) out[2]=1.; else if(x<0.) out[2]=-1.; else out[2]=0.; ! if ((x=in[3])>0.) out[3]=1.; else if(x<0.) out[3]=-1.; else out[3]=0.; ! if ((x=in[4])>0.) out[4]=1.; else if(x<0.) out[4]=-1.; else out[4]=0.; ! if ((x=in[5])>0.) out[5]=1.; else if(x<0.) out[5]=-1.; else out[5]=0.; ! if ((x=in[6])>0.) out[6]=1.; else if(x<0.) out[6]=-1.; else out[6]=0.; ! if ((x=in[7])>0.) out[7]=1.; else if(x<0.) out[7]=-1.; else out[7]=0.;
! in+=8; ! out+=8; ! }
return (w+4); --- 49,71 ---- static t_int *sgnTilde_perform8(t_int *w) { ! t_sample *in = (t_sample *)(w[1]); ! t_sample *out = (t_sample *)(w[2]); int n = (int)(w[3])>>3; ! t_sample x;
! while(n--){ ! /* weirdly enough, the if/else/if/else is a lot faster than ()?:(()?:) */ ! if ((x=in[0])>0.) out[0]=1.; else if(x<0.) out[0]=-1.; else out[0]=0.; ! if ((x=in[1])>0.) out[1]=1.; else if(x<0.) out[1]=-1.; else out[1]=0.; ! if ((x=in[2])>0.) out[2]=1.; else if(x<0.) out[2]=-1.; else out[2]=0.; ! if ((x=in[3])>0.) out[3]=1.; else if(x<0.) out[3]=-1.; else out[3]=0.; ! if ((x=in[4])>0.) out[4]=1.; else if(x<0.) out[4]=-1.; else out[4]=0.; ! if ((x=in[5])>0.) out[5]=1.; else if(x<0.) out[5]=-1.; else out[5]=0.; ! if ((x=in[6])>0.) out[6]=1.; else if(x<0.) out[6]=-1.; else out[6]=0.; ! if ((x=in[7])>0.) out[7]=1.; else if(x<0.) out[7]=-1.; else out[7]=0.;
! in+=8; ! out+=8; ! }
return (w+4); *************** *** 112,121 **** static void sgnTilde_dsp(t_sgnTilde *x, t_signal **sp) { - ZEXY_USEVAR(x); #ifdef __SSE__ if( Z_SIMD_CHKBLOCKSIZE(sp[0]->s_n)&& Z_SIMD_CHKALIGN(sp[0]->s_vec)&& ! Z_SIMD_CHKALIGN(sp[1]->s_vec)) { dsp_add(sgnTilde_performSSE, 3, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n); --- 112,122 ---- static void sgnTilde_dsp(t_sgnTilde *x, t_signal **sp) { #ifdef __SSE__ if( Z_SIMD_CHKBLOCKSIZE(sp[0]->s_n)&& Z_SIMD_CHKALIGN(sp[0]->s_vec)&& ! Z_SIMD_CHKALIGN(sp[1]->s_vec)&& ! ZEXY_TYPE_EQUAL(t_sample, float) // currently SSE2 code is only for float (not for double) ! ) { dsp_add(sgnTilde_performSSE, 3, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n); *************** *** 146,150 **** { sgnTilde_class = class_new(gensym("sgn~"), (t_newmethod)sgnTilde_new, 0, ! sizeof(t_sgnTilde), 0, A_DEFFLOAT, 0); class_addmethod(sgnTilde_class, nullfn, gensym("signal"), 0); class_addmethod(sgnTilde_class, (t_method)sgnTilde_dsp, gensym("dsp"), 0); --- 147,151 ---- { sgnTilde_class = class_new(gensym("sgn~"), (t_newmethod)sgnTilde_new, 0, ! sizeof(t_sgnTilde), 0, A_DEFFLOAT, 0); class_addmethod(sgnTilde_class, nullfn, gensym("signal"), 0); class_addmethod(sgnTilde_class, (t_method)sgnTilde_dsp, gensym("dsp"), 0);
Index: step~.c =================================================================== RCS file: /cvsroot/pure-data/externals/zexy/src/step~.c,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** step~.c 14 Mar 2007 09:08:56 -0000 1.4 --- step~.c 30 Oct 2007 09:21:52 -0000 1.5 *************** *** 15,27 ****
/* ! step~ : will make a unity step at a desired point in the signal-vector; the second input specifies a ! length: after the so-specified time has elapsed, the step will toggle back to the previous ! value; ! the length can be passed as an argument when creating the object ! with length==1 you might do the dirac~ thing a little bit more complicated ! with length==0 the output just toggles between 0 and 1 every time you bang the object
! NOTE : the inlets do NOT specify any times but sample-NUMBERS; there are 64 samples in a signal-vector, ! each "lasting" for 1/44100 secs. */
--- 15,27 ----
/* ! step~ : will make a unity step at a desired point in the signal-vector; the second input specifies a ! length: after the so-specified time has elapsed, the step will toggle back to the previous ! value; ! the length can be passed as an argument when creating the object ! with length==1 you might do the dirac~ thing a little bit more complicated ! with length==0 the output just toggles between 0 and 1 every time you bang the object
! NOTE : the inlets do NOT specify any times but sample-NUMBERS; there are 64 samples in a signal-vector, ! each "lasting" for 1/44100 secs. */
*************** *** 34,63 **** typedef struct _step { ! t_object x_obj; ! int position; ! int length;
! int toggle;
! int wait4start; ! int wait4stop; } t_step;
static void step_bang(t_step *x) { ! x->wait4stop = x->length + (x->wait4start = x->position); }
static void step_float(t_step *x, t_float where) { ! x->wait4stop = x->length + ! (x->wait4start = ! (x->position = (where>0)*where) ! ); }
static void step_setlength(t_step *x, t_float arg) { ! x->length = 1 + (arg>0)*arg; }
--- 34,63 ---- typedef struct _step { ! t_object x_obj; ! int position; ! int length;
! int toggle;
! int wait4start; ! int wait4stop; } t_step;
static void step_bang(t_step *x) { ! x->wait4stop = x->length + (x->wait4start = x->position); }
static void step_float(t_step *x, t_float where) { ! x->wait4stop = x->length + ! (x->wait4start = ! (x->position = (where>0)*where) ! ); }
static void step_setlength(t_step *x, t_float arg) { ! x->length = 1 + (arg>0)*arg; }
*************** *** 66,96 **** static t_int *step_perform(t_int *w) { ! t_step *x = (t_step *)(w[1]); ! t_float *out = (t_float *)(w[2]); ! int n = (int)(w[3]);
! int toggle = x->toggle;
! int wait4start = x->wait4start, wait4stop = x->wait4stop;
! while (n--) ! { ! wait4stop--; ! if (!wait4start--) toggle ^= 1; ! else if (!wait4stop) toggle ^= 1;
! *out++ = toggle; ! }
! x->wait4start = wait4start; ! x->wait4stop = wait4stop;
! x->toggle = toggle; ! return (w+4); }
static void step_dsp(t_step *x, t_signal **sp) { ! dsp_add(step_perform, 3, x, sp[0]->s_vec, sp[0]->s_n); }
--- 66,96 ---- static t_int *step_perform(t_int *w) { ! t_step *x = (t_step *)(w[1]); ! t_sample *out = (t_sample *)(w[2]); ! int n = (int)(w[3]);
! int toggle = x->toggle;
! int wait4start = x->wait4start, wait4stop = x->wait4stop;
! while (n--) ! { ! wait4stop--; ! if (!wait4start--) toggle ^= 1; ! else if (!wait4stop) toggle ^= 1;
! *out++ = toggle; ! }
! x->wait4start = wait4start; ! x->wait4stop = wait4stop;
! x->toggle = toggle; ! return (w+4); }
static void step_dsp(t_step *x, t_signal **sp) { ! dsp_add(step_perform, 3, x, sp[0]->s_vec, sp[0]->s_n); }
*************** *** 98,109 **** static void step_helper(void) { ! post("%c step~-object :: generates a unity-step", HEARTSYMBOL); ! post("creation : "dirac~ [<position> [<length>]]" : create a rectangular window\n" ! "\t\t\tat specified position and with specified length (in samples)\n" ! "inlet1\t: <position>\t: create a rectangular window at new position\n" ! "\t 'bang'\t: create a rectangular window at specified position\n" ! "\t 'help'\t: view this\n" ! "inlet2\t: <length>\t: define new window length ('0' will make a unity-step)\n" ! "outlet\t: signal~"); }
--- 98,109 ---- static void step_helper(void) { ! post("%c step~-object :: generates a unity-step", HEARTSYMBOL); ! post("creation : "dirac~ [<position> [<length>]]" : create a rectangular window\n" ! "\t\t\tat specified position and with specified length (in samples)\n" ! "inlet1\t: <position>\t: create a rectangular window at new position\n" ! "\t 'bang'\t: create a rectangular window at specified position\n" ! "\t 'help'\t: view this\n" ! "inlet2\t: <length>\t: define new window length ('0' will make a unity-step)\n" ! "outlet\t: signal~"); }
*************** *** 111,139 **** static void *step_new(t_floatarg farg) { ! t_step *x = (t_step *)pd_new(step_class);
! inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("float"), gensym("ft1")); ! outlet_new(&x->x_obj, gensym("signal"));
! x->position = 0; ! x->wait4start = x->wait4stop = 0; ! x->toggle = 1;
! step_setlength(x, farg);
! return (x); }
void step_tilde_setup(void) { ! step_class = class_new(gensym("step~"), (t_newmethod)step_new, 0, ! sizeof(t_step), 0, A_DEFFLOAT, 0);
! class_addfloat(step_class, step_float); ! class_addbang(step_class, step_bang); ! class_addmethod(step_class, (t_method)step_setlength, gensym("ft1"), A_FLOAT, 0); ! class_addmethod(step_class, (t_method)step_dsp, gensym("dsp"), 0);
! class_addmethod(step_class, (t_method)step_helper, gensym("help"), 0);
zexy_register("step~"); --- 111,139 ---- static void *step_new(t_floatarg farg) { ! t_step *x = (t_step *)pd_new(step_class);
! inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft1")); ! outlet_new(&x->x_obj, &s_signal);
! x->position = 0; ! x->wait4start = x->wait4stop = 0; ! x->toggle = 1;
! step_setlength(x, farg);
! return (x); }
void step_tilde_setup(void) { ! step_class = class_new(gensym("step~"), (t_newmethod)step_new, 0, ! sizeof(t_step), 0, A_DEFFLOAT, 0);
! class_addfloat(step_class, step_float); ! class_addbang(step_class, step_bang); ! class_addmethod(step_class, (t_method)step_setlength, gensym("ft1"), A_FLOAT, 0); ! class_addmethod(step_class, (t_method)step_dsp, gensym("dsp"), 0);
! class_addmethod(step_class, (t_method)step_helper, gensym("help"), 0);
zexy_register("step~");
Index: multiline~.c =================================================================== RCS file: /cvsroot/pure-data/externals/zexy/src/multiline~.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** multiline~.c 14 Mar 2007 09:08:56 -0000 1.6 --- multiline~.c 30 Oct 2007 09:21:52 -0000 1.7 *************** *** 47,57 **** t_float msec2tick;
! t_float *value; ! t_float *target; ! t_float *increment; /* single precision is really a bad */
! t_float **sigIN; ! t_float **sigOUT; ! t_float *sigBUF; int sigNUM;
--- 47,57 ---- t_float msec2tick;
! t_sample *value; ! t_sample *target; ! t_sample *increment; /* single precision is really a bad */
! t_sample **sigIN; ! t_sample **sigOUT; ! t_sample *sigBUF; int sigNUM;
*************** *** 104,113 **** int n = (int)(w[2]);
! t_float **out = x->sigOUT; ! t_float **in = x->sigIN; ! t_float *buf = x->sigBUF, *sigBUF = buf; ! t_float *inc = x->increment, *increment = inc; ! t_float *val = x->value, *value = val; ! t_float *tgt = x->target, *target = tgt;
int sigNUM = x->sigNUM; --- 104,113 ---- int n = (int)(w[2]);
! t_sample **out = x->sigOUT; ! t_sample **in = x->sigIN; ! t_sample *buf = x->sigBUF, *sigBUF = buf; ! t_sample *inc = x->increment, *increment = inc; ! t_sample *val = x->value, *value = val; ! t_sample *tgt = x->target, *target = tgt;
int sigNUM = x->sigNUM; *************** *** 124,128 **** if (x->ticksleft) { int N=n-1; ! t_float oneovernos = 1./(x->ticksleft*n);
int i=sigNUM; --- 124,128 ---- if (x->ticksleft) { int N=n-1; ! t_sample oneovernos = 1./(x->ticksleft*n);
int i=sigNUM; *************** *** 170,174 **** { int i = x->sigNUM, n = 0; ! t_float **dummy = x->sigIN; while(i--)*dummy++=sp[n++]->s_vec;
--- 170,174 ---- { int i = x->sigNUM, n = 0; ! t_sample **dummy = x->sigIN; while(i--)*dummy++=sp[n++]->s_vec;
*************** *** 198,249 **** static void *mline_new(t_symbol *s, int argc, t_atom *argv) { ! t_mline *x = (t_mline *)pd_new(mline_class); ! int i; ! ZEXY_USEVAR(s);
! if (!argc) { ! argc = 1; ! x->time = 0; ! } else { ! x->time = atom_getfloat(argv+argc-1); ! if (x->time < 0) x->time = 0;
! argc--; ! if (!argc) argc = 1; ! }
! x->sigNUM = argc;
! i = argc-1;
! outlet_new(&x->x_obj, &s_signal);
! while (i--) { ! inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal); ! outlet_new(&x->x_obj, &s_signal); ! }
! inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("float"), gensym("")); ! floatinlet_new(&x->x_obj, &x->time);
! x->sigIN = (t_float **)getbytes(x->sigNUM * sizeof(t_float **)); ! x->sigOUT = (t_float **)getbytes(x->sigNUM * sizeof(t_float **)); ! x->sigBUF = (t_float *)getbytes(x->sigNUM * sizeof(t_float *));
! x->value = (t_float *)getbytes(x->sigNUM * sizeof(t_float *)); ! x->target = (t_float *)getbytes(x->sigNUM * sizeof(t_float *)); ! x->increment = (t_float *)getbytes(x->sigNUM * sizeof(t_float *));
! i = x->sigNUM;
! while (i--) { ! x->sigIN[i] = x->sigOUT[i] = 0; ! x->increment[i] = 0; ! x->value[x->sigNUM-i-1] = x->target[x->sigNUM-i-1] = atom_getfloat(argv+i); ! }
! x->msec2tick = x->ticksleft = x->retarget = 0;
! return (x); }
--- 198,249 ---- static void *mline_new(t_symbol *s, int argc, t_atom *argv) { ! t_mline *x = (t_mline *)pd_new(mline_class); ! int i; ! ZEXY_USEVAR(s);
! if (!argc) { ! argc = 1; ! x->time = 0; ! } else { ! x->time = atom_getfloat(argv+argc-1); ! if (x->time < 0) x->time = 0;
! argc--; ! if (!argc) argc = 1; ! }
! x->sigNUM = argc;
! i = argc-1;
! outlet_new(&x->x_obj, &s_signal);
! while (i--) { ! inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal); ! outlet_new(&x->x_obj, &s_signal); ! }
! inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("")); ! floatinlet_new(&x->x_obj, &x->time);
! x->sigIN = (t_sample **)getbytes(x->sigNUM * sizeof(t_sample **)); ! x->sigOUT = (t_sample **)getbytes(x->sigNUM * sizeof(t_sample **)); ! x->sigBUF = (t_sample *)getbytes(x->sigNUM * sizeof(t_sample *));
! x->value = (t_sample *)getbytes(x->sigNUM * sizeof(t_sample *)); ! x->target = (t_sample *)getbytes(x->sigNUM * sizeof(t_sample *)); ! x->increment = (t_sample *)getbytes(x->sigNUM * sizeof(t_sample *));
! i = x->sigNUM;
! while (i--) { ! x->sigIN[i] = x->sigOUT[i] = 0; ! x->increment[i] = 0; ! x->value[x->sigNUM-i-1] = x->target[x->sigNUM-i-1] = atom_getfloat(argv+i); ! }
! x->msec2tick = x->ticksleft = x->retarget = 0;
! return (x); }
Index: noish~.c =================================================================== RCS file: /cvsroot/pure-data/externals/zexy/src/noish~.c,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** noish~.c 14 Mar 2007 09:08:56 -0000 1.5 --- noish~.c 30 Oct 2007 09:21:52 -0000 1.6 *************** *** 42,49 **** t_object x_obj; int val; ! t_float current; ! t_float decrement; ! t_float updater; ! t_float to_go; } t_nois;
--- 42,49 ---- t_object x_obj; int val; ! t_sample current; ! t_sample decrement; ! t_sample updater; ! t_sample to_go; } t_nois;
*************** *** 60,63 **** --- 60,68 ----
+ static void set_noisseed(t_nois *x, t_floatarg seed) + { + x->val = seed; + } + /* ------------------------ noish~ ----------------------------- */
*************** *** 67,79 **** { t_nois *x = (t_nois *)(w[1]); ! t_float *out = (t_float *)(w[2]); int n = (int)(w[3]); int *vp = (int *)(&x->val); int i_value = *vp; ! t_float f_value = ((float)((i_value & 0x7fffffff) - 0x40000000)) * ! (float)(1.0 / 0x40000000); ! t_float all_to_go = x->updater; ! t_float still_to_go = x->to_go;
if (all_to_go == 1) --- 72,84 ---- { t_nois *x = (t_nois *)(w[1]); ! t_sample *out = (t_sample *)(w[2]); int n = (int)(w[3]); int *vp = (int *)(&x->val); int i_value = *vp; ! t_sample f_value = ((t_sample)((i_value & 0x7fffffff) - 0x40000000)) * ! (t_sample)(1.0 / 0x40000000); ! t_sample all_to_go = x->updater; ! t_sample still_to_go = x->to_go;
if (all_to_go == 1) *************** *** 83,87 **** i_value *= 435898247; i_value += 382842987; ! *out++ = ((float)((i_value & 0x7fffffff) - 0x40000000)) * (float)(1.0 / 0x40000000); } } --- 88,92 ---- i_value *= 435898247; i_value += 382842987; ! *out++ = ((t_sample)((i_value & 0x7fffffff) - 0x40000000)) * (t_sample)(1.0 / 0x40000000); } } *************** *** 108,112 **** i_value *= 435898247; i_value += 382842987; ! f_value = ( (float)((i_value & 0x7fffffff) - 0x40000000) ) * (float)(1.0 / 0x40000000);
while (n--) --- 113,117 ---- i_value *= 435898247; i_value += 382842987; ! f_value = ( (t_sample)((i_value & 0x7fffffff) - 0x40000000) ) * (t_sample)(1.0 / 0x40000000);
while (n--) *************** *** 127,131 **** i_value += 382842987; ! f_value = ( (float)((i_value & 0x7fffffff) - 0x40000000) ) * (float)(1.0 / 0x40000000); } *out++ = f_value; --- 132,136 ---- i_value += 382842987; ! f_value = ( (t_sample)((i_value & 0x7fffffff) - 0x40000000) ) * (t_sample)(1.0 / 0x40000000); } *out++ = f_value; *************** *** 180,183 **** --- 185,190 ---- class_addmethod(noish_class, (t_method)noish_dsp, gensym("dsp"), 0);
+ class_addmethod(noish_class, (t_method)set_noisseed, gensym("seed"), A_FLOAT, 0); + class_addmethod(noish_class, (t_method)noish_helper, gensym("help"), 0); zexy_register("noish~");