From 33dd6d603830640766aa1a5fe70137c856e2c145 Mon Sep 17 00:00:00 2001 From: musil Date: Thu, 6 Sep 2012 15:54:46 +0000 Subject: other variable names, t_float to t_sample change, array access 64 bit svn path=/trunk/externals/iemlib/; revision=16193 --- iemlib1/src/sin_phase~.c | 75 +++++++++++++++++++++++++++--------------------- 1 file changed, 43 insertions(+), 32 deletions(-) (limited to 'iemlib1/src/sin_phase~.c') diff --git a/iemlib1/src/sin_phase~.c b/iemlib1/src/sin_phase~.c index 0707758..e99f3a7 100644 --- a/iemlib1/src/sin_phase~.c +++ b/iemlib1/src/sin_phase~.c @@ -13,11 +13,11 @@ iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2006 typedef struct _sin_phase_tilde { t_object x_obj; - t_float x_prev1; - t_float x_prev2; - t_float x_cur_out; - int x_counter1; - int x_counter2; + t_sample x_prev1; + t_sample x_prev2; + t_sample x_cur_out; + t_sample x_counter1; + t_sample x_counter2; int x_state1; int x_state2; t_float x_float_sig_in; @@ -27,49 +27,49 @@ static t_class *sin_phase_tilde_class; static t_int *sin_phase_tilde_perform(t_int *w) { - t_float *in1 = (t_float *)(w[1]); - t_float *in2 = (t_float *)(w[2]); - t_float *out = (t_float *)(w[3]); + t_sample *in1 = (t_sample *)(w[1]); + t_sample *in2 = (t_sample *)(w[2]); + t_sample *out = (t_sample *)(w[3]); t_sin_phase_tilde *x = (t_sin_phase_tilde *)(w[4]); int i, n = (t_int)(w[5]); - t_float prev1=x->x_prev1; - t_float prev2=x->x_prev2; - t_float cur_out=x->x_cur_out; - int counter1=x->x_counter1; - int counter2=x->x_counter2; + t_sample prev1=x->x_prev1; + t_sample prev2=x->x_prev2; + t_sample cur_out=x->x_cur_out; + t_sample counter1=x->x_counter1; + t_sample counter2=x->x_counter2; int state1=x->x_state1; int state2=x->x_state2; for(i=0; i= 0.0f) && (prev1 < 0.0f)) + if((in1[i] >= 0.0) && (prev1 < 0.0)) {/* pos. zero cross of sig_in_1 */ state1 = 1; - counter1 = 0; + counter1 = prev1 / (prev1 - in1[i]); /* x = y1 / (y1 - y2) */ } - else if((in1[i] < 0.0f) && (prev1 >= 0.0f)) + else if((in1[i] < 0.0) && (prev1 >= 0.0)) {/* neg. zero cross of sig_in_1 */ state2 = 1; - counter2 = 0; + counter2 = prev1 / (prev1 - in1[i]); /* x = y1 / (y1 - y2) */ } - if((in2[i] >= 0.0f) && (prev2 < 0.0f)) + if((in2[i] >= 0.0) && (prev2 < 0.0)) {/* pos. zero cross of sig_in_2 */ state1 = 0; - cur_out = (t_float)(counter1); - counter1 = 0; + cur_out = counter1 + prev2 / (prev2 - in2[i]) - 1.0; + counter1 = 0.0; } - else if((in2[i] < 0.0f) && (prev2 >= 0.0f)) + else if((in2[i] < 0.0) && (prev2 >= 0.0)) {/* neg. zero cross of sig_in_2 */ state2 = 0; - cur_out = (t_float)(counter2); - counter2 = 0; + cur_out = counter2 + prev2 / (prev2 - in2[i]) - 1.0; + counter2 = 0.0; } if(state1) - counter1++; + counter1 += 1.0; if(state2) - counter2++; + counter2 += 1.0; prev1 = in1[i]; prev2 = in2[i]; @@ -99,14 +99,14 @@ static void *sin_phase_tilde_new(void) inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal); outlet_new(&x->x_obj, &s_signal); - x->x_prev1 = 0.0f; - x->x_prev2 = 0.0f; - x->x_cur_out = 0.0f; - x->x_counter1 = 0; - x->x_counter2 = 0; + x->x_prev1 = 0.0; + x->x_prev2 = 0.0; + x->x_cur_out = 0.0; + x->x_counter1 = 0.0; + x->x_counter2 = 0.0; x->x_state1 = 0; x->x_state2 = 0; - x->x_float_sig_in = 0.0f; + x->x_float_sig_in = 0.0; return (x); } @@ -117,5 +117,16 @@ void sin_phase_tilde_setup(void) 0, sizeof(t_sin_phase_tilde), 0, 0); CLASS_MAINSIGNALIN(sin_phase_tilde_class, t_sin_phase_tilde, x_float_sig_in); class_addmethod(sin_phase_tilde_class, (t_method)sin_phase_tilde_dsp, gensym("dsp"), 0); -// class_sethelpsymbol(sin_phase_tilde_class, gensym("iemhelp/help-sin_phase~")); } + +/* +geradengleichung: + +y - y1 = ((y2 - y1) / (x2 - x1)) * (x - x1) +y = ((y2 - y1) / (x2 - x1)) * (x - x1) + y1 = 0 +x1 = 0 +x2 = 1 +0 = ((y2 - y1) / 1) * (x) + y1 +-y1 = (y2 - y1) * x +x = y1 / (y1 - y2) +*/ -- cgit v1.2.1