From 48cb10a8590255f952f53f3ff558ce345b86a3fe Mon Sep 17 00:00:00 2001 From: musil Date: Thu, 6 Sep 2012 15:53:29 +0000 Subject: other variable names, t_float to t_sample change, array access 64 bit svn path=/trunk/externals/iemlib/; revision=16192 --- iemlib1/src/FIR~.c | 115 +++++++++++++++++++++++++++++------------------------ 1 file changed, 63 insertions(+), 52 deletions(-) diff --git a/iemlib1/src/FIR~.c b/iemlib1/src/FIR~.c index a90825e..07f8417 100644 --- a/iemlib1/src/FIR~.c +++ b/iemlib1/src/FIR~.c @@ -1,7 +1,7 @@ /* For information on usage and redistribution, and for a DISCLAIMER OF ALL * WARRANTIES, see the file, "LICENSE.txt," in this distribution. -iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2006 */ +iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2012 */ #include "m_pd.h" @@ -12,34 +12,35 @@ iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2006 typedef struct _FIR_tilde { - t_object x_obj; - t_float *x_coef_beg; - t_float *x_history_beg; - int x_rw_index; - int x_fir_order; - t_symbol *x_table_name; - t_float x_float_sig_in; + t_object x_obj; + iemarray_t *x_array_coef_beg; + t_sample *x_history_beg; + int x_rw_index; + int x_fir_order; + int x_malloc_history; + t_symbol *x_table_name; + t_float x_float_sig_in; } t_FIR_tilde; static t_class *FIR_tilde_class; static t_int *FIR_tilde_perform(t_int *w) { - t_float *in = (t_float *)(w[1]); - t_float *out = (t_float *)(w[2]); + t_sample *in = (t_sample *)(w[1]); + t_sample *out = (t_sample *)(w[2]); t_FIR_tilde *x = (t_FIR_tilde *)(w[3]); int n = (t_int)(w[4]); int rw_index = x->x_rw_index; int i, j; int order = x->x_fir_order; int ord16 = order / 16; - t_float sum=0.0f; - t_float *coef = x->x_coef_beg; - t_float *write_hist1=x->x_history_beg; - t_float *write_hist2; - t_float *read_hist; - t_float *coef_vec; - t_float *hist_vec; + t_sample sum=0.0; + iemarray_t *coef = x->x_array_coef_beg; + t_sample *write_hist1=x->x_history_beg; + t_sample *write_hist2; + t_sample *read_hist; + iemarray_t *coef_vec; + t_sample *hist_vec; if(!coef) goto FIR_tildeperfzero; @@ -53,33 +54,33 @@ static t_int *FIR_tilde_perform(t_int *w) write_hist1[rw_index] = in[i]; write_hist2[rw_index] = in[i]; - sum = 0.0f; + sum = 0.0; coef_vec = coef; hist_vec = &read_hist[rw_index]; for(j=0; jx_table_name = table_name; + if(order < 1) + order = 1; + x->x_fir_order = order; if(!(ga = (t_garray *)pd_findbyclass(x->x_table_name, garray_class))) { if(*table_name->s_name) error("FIR~: %s: no such table~", x->x_table_name->s_name); - x->x_coef_beg = 0; + x->x_array_coef_beg = (iemarray_t *)0; } - else if(!garray_getfloatarray(ga, &table_size, &x->x_coef_beg)) + else if(!iemarray_getarray(ga, &table_size, &x->x_array_coef_beg)) { error("%s: bad template for FIR~", x->x_table_name->s_name); - x->x_coef_beg = 0; + x->x_array_coef_beg = (iemarray_t *)0; } else if(table_size < order) { error("FIR~: tablesize %d < order %d !!!!", table_size, order); - x->x_coef_beg = 0; + x->x_array_coef_beg = (iemarray_t *)0; } else - garray_usedindsp(ga); + { + garray_usedindsp(ga);/* good */ + } x->x_rw_index = 0; - if(order > x->x_fir_order)/* resize */ - x->x_history_beg = (t_float *)resizebytes(x->x_history_beg, 2*x->x_fir_order*sizeof(t_float), 2*order*sizeof(float)); - x->x_fir_order = order; + if(x->x_fir_order > x->x_malloc_history)/* resize */ + { + x->x_history_beg = (t_sample *)resizebytes(x->x_history_beg, 2*x->x_malloc_history*sizeof(t_sample), 2*x->x_fir_order*sizeof(t_sample)); + x->x_malloc_history = x->x_fir_order; + } } static void FIR_tilde_dsp(t_FIR_tilde *x, t_signal **sp) @@ -135,18 +144,20 @@ static void FIR_tilde_dsp(t_FIR_tilde *x, t_signal **sp) dsp_add(FIR_tilde_perform, 4, sp[0]->s_vec, sp[1]->s_vec, x, sp[0]->s_n); } -static void *FIR_tilde_new(t_symbol *ref, t_floatarg np) +static void *FIR_tilde_new(t_symbol *array_name, t_floatarg forder) { t_FIR_tilde *x = (t_FIR_tilde *)pd_new(FIR_tilde_class); + int order = (int)forder; outlet_new(&x->x_obj, &s_signal); x->x_float_sig_in = 0; - x->x_table_name = ref; - x->x_coef_beg = 0; - if((int)np < 1) - np = 1.0; - x->x_fir_order = (int)np; - x->x_history_beg = (t_float *)getbytes((2*x->x_fir_order)*sizeof(t_float)); + x->x_table_name = array_name; + x->x_array_coef_beg = 0; + if(order < 1) + order = 1; + x->x_fir_order = order; + x->x_malloc_history = order; + x->x_history_beg = (t_sample *)getbytes((2*x->x_malloc_history)*sizeof(t_sample)); x->x_rw_index = 0; return(x); } @@ -154,7 +165,7 @@ static void *FIR_tilde_new(t_symbol *ref, t_floatarg np) static void FIR_tilde_free(t_FIR_tilde *x) { if(x->x_history_beg) - freebytes(x->x_history_beg, (2*x->x_fir_order)*sizeof(t_float)); + freebytes(x->x_history_beg, (2*x->x_malloc_history)*sizeof(t_sample)); } void FIR_tilde_setup(void) -- cgit v1.2.1