static t_int *hml_shelf_tilde_perform(t_int *w) { t_float *in = (t_float *)(w[1]); t_float *out = (t_float *)(w[2]); t_hml_shelf_tilde *x = (t_hml_shelf_tilde *)(w[3]); int i, n = (t_int)(w[4]); t_float wn0, wn1=x->wn1, wn2=x->wn2; t_float a0=x->a0, a1=x->a1, a2=x->a2; t_float b1=x->b1, b2=x->b2; hml_shelf_tilde_dsp_tick(x); for(i=0; i<n; i++) { wn0 = *in++ + b1*wn1 + b2*wn2; *out++ = a0*wn0 + a1*wn1 + a2*wn2; wn2 = wn1; wn1 = wn0; } /* NAN protect */ if(IEM_DENORMAL(wn2)) wn2 = 0.0f; if(IEM_DENORMAL(wn1)) wn1 = 0.0f; x->wn1 = wn1; x->wn2 = wn2; return(w+5); }
static t_int *vcf_filter_tilde_perform_hp2(t_int *w) { t_float *in = (t_float *)(w[1]); t_float *lp = (t_float *)(w[2]); t_float *q = (t_float *)(w[3]); t_float *out = (t_float *)(w[4]); t_vcf_filter_tilde *x = (t_vcf_filter_tilde *)(w[5]); int i, n = (t_int)(w[6]); t_float wn0, wn1=x->x_wn1, wn2=x->x_wn2; t_float l, al, l2, rcp, forw; for(i=0; i<n; i+=4) { l = lp[i]; if(q[i] < 0.000001f) al = 1000000.0f*l; else if(q[i] > 1000000.0f) al = 0.000001f*l; else al = l/q[i]; l2 = l*l + 1.0f; rcp = 1.0f/(al + l2); forw = rcp * (l2 - 1.0f); wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2); *out++ = forw*(wn0 - 2.0f*wn1 + wn2); wn2 = wn1; wn1 = wn0; wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2); *out++ = forw*(wn0 - 2.0f*wn1 + wn2); wn2 = wn1; wn1 = wn0; wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2); *out++ = forw*(wn0 - 2.0f*wn1 + wn2); wn2 = wn1; wn1 = wn0; wn0 = *in++ - rcp*(2.0f*(2.0f - l2)*wn1 + (l2 - al)*wn2); *out++ = forw*(wn0 - 2.0f*wn1 + wn2); wn2 = wn1; wn1 = wn0; } /* NAN protect */ if(IEM_DENORMAL(wn2)) wn2 = 0.0f; if(IEM_DENORMAL(wn1)) wn1 = 0.0f; x->x_wn1 = wn1; x->x_wn2 = wn2; return(w+7); }
static t_int *peakenv_tilde_perform(t_int *w) { t_float *in = (t_float *)(w[1]); t_float *out = (t_float *)(w[2]); t_peakenv_tilde *x = (t_peakenv_tilde *)(w[3]); int n = (int)(w[4]); t_float peak = x->x_old_peak; t_float c1 = x->x_c1; t_float absolute; int i; for(i=0; i<n; i++) { absolute = fabs(*in++); peak *= c1; if(absolute > peak) peak = absolute; *out++ = peak; } /* NAN protect */ if(IEM_DENORMAL(peak)) peak = 0.0f; x->x_old_peak = peak; return(w+5); }
static t_int *peakenv_hold_tilde_perform(t_int *w) { t_float *in = (t_float *)(w[1]); t_float *out = (t_float *)(w[2]); t_peakenv_hold_tilde *x = (t_peakenv_hold_tilde *)(w[3]); int n = (int)(w[4]); t_float peak = x->x_old_peak; t_float c1 = x->x_c1; t_float absolute; t_int i, counter; counter = x->x_counter; for(i=0; i<n; i++) { absolute = fabs(*in++); if(counter > 0) counter--;// hold peride else peak *= c1;// release periode if(absolute > peak) { peak = absolute; counter = x->x_n_hold;// new hold initialisation } *out++ = peak; } /* NAN protect */ if(IEM_DENORMAL(peak)) peak = 0.0f; x->x_old_peak = peak; x->x_counter = counter; return(w+5); }
static void pvu_tilde_tick(t_pvu_tilde *x) { t_float db; int i; x->x_old_peak *= x->x_c1; /* NAN protect */ if(IEM_DENORMAL(x->x_old_peak)) x->x_old_peak = 0.0f; if(x->x_cur_peak > x->x_old_peak) x->x_old_peak = x->x_cur_peak; if(x->x_old_peak <= 0.0000000001f) db = -199.9f; else if(x->x_old_peak > 1000000.0f) { db = 120.0f; x->x_old_peak = 1000000.0f; } else db = 8.6858896381f*log(x->x_old_peak); if(db >= x->x_threshold_over) { x->x_overflow_counter++; outlet_float(x->x_outlet_over, (t_float)x->x_overflow_counter); } outlet_float(x->x_outlet_meter, db); x->x_cur_peak = 0.0f; clock_delay(x->x_clock, x->x_metro_time); }
static t_int *hml_shelf_tilde_perf8(t_int *w) { t_float *in = (t_float *)(w[1]); t_float *out = (t_float *)(w[2]); t_hml_shelf_tilde *x = (t_hml_shelf_tilde *)(w[3]); int i, n = (t_int)(w[4]); t_float wn[10]; t_float a0=x->a0, a1=x->a1, a2=x->a2; t_float b1=x->b1, b2=x->b2; hml_shelf_tilde_dsp_tick(x); wn[0] = x->wn2; wn[1] = x->wn1; for(i=0; i<n; i+=8, in+=8, out+=8) { wn[2] = in[0] + b1*wn[1] + b2*wn[0]; out[0] = a0*wn[2] + a1*wn[1] + a2*wn[0]; wn[3] = in[1] + b1*wn[2] + b2*wn[1]; out[1] = a0*wn[3] + a1*wn[2] + a2*wn[1]; wn[4] = in[2] + b1*wn[3] + b2*wn[2]; out[2] = a0*wn[4] + a1*wn[3] + a2*wn[2]; wn[5] = in[3] + b1*wn[4] + b2*wn[3]; out[3] = a0*wn[5] + a1*wn[4] + a2*wn[3]; wn[6] = in[4] + b1*wn[5] + b2*wn[4]; out[4] = a0*wn[6] + a1*wn[5] + a2*wn[4]; wn[7] = in[5] + b1*wn[6] + b2*wn[5]; out[5] = a0*wn[7] + a1*wn[6] + a2*wn[5]; wn[8] = in[6] + b1*wn[7] + b2*wn[6]; out[6] = a0*wn[8] + a1*wn[7] + a2*wn[6]; wn[9] = in[7] + b1*wn[8] + b2*wn[7]; out[7] = a0*wn[9] + a1*wn[8] + a2*wn[7]; wn[0] = wn[8]; wn[1] = wn[9]; } /* NAN protect */ if(IEM_DENORMAL(wn[0])) wn[0] = 0.0f; if(IEM_DENORMAL(wn[1])) wn[1] = 0.0f; x->wn1 = wn[1]; x->wn2 = wn[0]; return(w+5); }
static t_int *lp1_t_tilde_perform(t_int *w) { t_float *in = (t_float *)(w[1]); t_float *out = (t_float *)(w[2]); t_lp1_t_tilde *x = (t_lp1_t_tilde *)(w[3]); int i, n = (t_int)(w[4]); t_float yn0, yn1=x->yn1; t_float c0=x->c0, c1=x->c1; lp1_t_tilde_dsp_tick(x); for(i=0; i<n; i++) { yn0 = (*in++)*c0 + yn1*c1; *out++ = yn0; yn1 = yn0; } /* NAN protect */ if(IEM_DENORMAL(yn1)) yn1 = 0.0f; x->yn1 = yn1; return(w+5); }
static t_int *lp1_t_tilde_perf8(t_int *w) { t_float *in = (t_float *)(w[1]); t_float *out = (t_float *)(w[2]); t_lp1_t_tilde *x = (t_lp1_t_tilde *)(w[3]); int i, n = (t_int)(w[4]); t_float ynn[9]; t_float c0=x->c0, c1=x->c1; lp1_t_tilde_dsp_tick(x); ynn[0] = x->yn1; for(i=0; i<n; i+=8, in+=8, out+=8) { ynn[1] = in[0]*c0 + ynn[0]*c1; out[0] = ynn[1]; ynn[2] = in[1]*c0 + ynn[1]*c1; out[1] = ynn[2]; ynn[3] = in[2]*c0 + ynn[2]*c1; out[2] = ynn[3]; ynn[4] = in[3]*c0 + ynn[3]*c1; out[3] = ynn[4]; ynn[5] = in[4]*c0 + ynn[4]*c1; out[4] = ynn[5]; ynn[6] = in[5]*c0 + ynn[5]*c1; out[5] = ynn[6]; ynn[7] = in[6]*c0 + ynn[6]*c1; out[6] = ynn[7]; ynn[8] = in[7]*c0 + ynn[7]*c1; out[7] = ynn[8]; ynn[0] = ynn[8]; } /* NAN protect */ if(IEM_DENORMAL(ynn[0])) ynn[0] = 0.0f; x->yn1 = ynn[0]; return(w+5); }
static void rvu_tilde_tick_metro(t_rvu_tilde *x) { t_float dbr, cur_rms, c1=x->x_c1; cur_rms = (1.0f - c1)*x->x_sum_rms*x->x_rcp + c1*x->x_old_rms; /* NAN protect */ if(IEM_DENORMAL(cur_rms)) cur_rms = 0.0f; if(cur_rms <= 0.0000000001f) dbr = -99.9f; else if(cur_rms > 1000000.0f) { dbr = 60.0f; x->x_old_rms = 1000000.0f; } else dbr = 4.3429448195f*log(cur_rms); x->x_sum_rms = 0.0f; x->x_old_rms = cur_rms; outlet_float(x->x_obj.ob_outlet, dbr); clock_delay(x->x_clock_metro, x->x_metro_time); }