diff options
Diffstat (limited to 'zeroxpos~/zeroxpos~.c')
-rw-r--r-- | zeroxpos~/zeroxpos~.c | 34 |
1 files changed, 14 insertions, 20 deletions
diff --git a/zeroxpos~/zeroxpos~.c b/zeroxpos~/zeroxpos~.c index adccc14..d6c15c5 100644 --- a/zeroxpos~/zeroxpos~.c +++ b/zeroxpos~/zeroxpos~.c @@ -29,34 +29,28 @@ t_int *zeroxpos_tilde_perform(t_int *w) int i = 0; x->i_pol = 0; x->i_ndx = -1; - int prev = ctl->final_pol; + int prev = ctl->final_pol == 0 ? in[0] : ctl->final_pol; for(i=0;i<n;i++) { polarity = in[i] >= 0 ? 1 : -1; - while(i>0) + if((polarity < prev || polarity > prev) && count == number && x->i_bang == 1) { - if((polarity < prev || polarity > prev) && count == number && x->i_bang == 1) - { - x->i_ndx = i; - x->i_pol = polarity; - count++; - x->i_bang = 0; - } - if((polarity < prev || polarity > prev) && count < number) - { - count++; - } - if(i==n-1) - { - ctl->final_pol = polarity; - x->i_count = count; - } + x->i_ndx = i; + x->i_pol = polarity; + count += 1e+06; + x->i_bang = 0; + outlet_float(x->f_pol, (float)x->i_pol); + outlet_float(x->f_pos, (float)x->i_ndx); + } + if((polarity < prev || polarity > prev) && count < number) count++; + if(i==n-1) + { + ctl->final_pol = polarity; + x->i_count = count; } prev = polarity; } - outlet_float(x->f_pol, (float)x->i_pol); - outlet_float(x->f_pos, (float)x->i_ndx); return(w+4); } |