void oedge_perform64(t_oedge *x, t_object *dsp64, double **ins, long numins, double **outs, long numouts, long vectorsize, long flags, void *userparam) { omax_realtime_clock_tick(x); t_osc_timetag now; omax_realtime_clock_now(&now); atom_setlong(x->av + 1, x->blockcount++); atom_setlong(x->av + 2, osc_timetag_ntp_getSeconds(now));//(((uint64_t)now) & 0xffffffff00000000) >> 32); atom_setlong(x->av + 3, osc_timetag_ntp_getFraction(now));//(((uint64_t)now) & 0xffffffff)); atom_setdouble_array(x->ac, x->av + 4, vectorsize, ins[0]); schedule_delay(x, (method)oedge_callback, 0, NULL, vectorsize + 4, x->av); }
t_int *oedge_perform(t_int *w) { t_oedge *x = (t_oedge *)(w[1]); t_float *in = (t_float *)(w[2]); t_int n = (t_float *)(w[3]); omax_realtime_clock_tick(x); t_osc_timetag now; omax_realtime_clock_now(&now); atom_setlong(x->av + 1, x->blockcount++); atom_setlong(x->av + 2, osc_timetag_ntp_getSeconds(now));//(((uint64_t)now) & 0xffffffff00000000) >> 32); atom_setlong(x->av + 3, osc_timetag_ntp_getFraction(now));//(((uint64_t)now) & 0xffffffff)); atom_setdouble_array(x->ac, x->av + 4, n, in); schedule_delay(x, (method)oedge_callback, 0, NULL, n + 4, x->av); return w + 4; }
void calcCoeffs(t_myObj *x) { int i, j; double results[5]; double sa, sb, rgain; int poles2 = x->poles/2; // poles must be even for(j=0; j<poles2; j++) { calc(x, j, results); // normalize gain sa = 0; sb = 0; for(i=0; i<3; i++) { if(x->mode == 0) { sa += results[i]; } else { sa += results[i]*pow(-1, i); } } if(x->mode == 0) sb = results[3]+results[4]; else sb = -results[3]+results[4]; rgain = (1-sb) / sa; double val; for(i=0; i<3; i++) { val = results[i]*rgain; //atom_setfloat(x->stages+(j*5+i), val); x->coeffs[j*5+i] = val; } for(i=0; i<2; i++) { val= -results[i+3]; //atom_setfloat(x->stages+(j*5+3+i), val); x->coeffs[j*5+3+i] = val; } } atom_setdouble_array((5*poles2), x->stages, (MAXPOLES*5/2), x->coeffs); outlet_list(x->stages_out, 0L, 5*poles2, x->stages); }