void thresher_dsp(t_thresher *x, t_signal **sp) { int reset_required = 0; int maxvectorsize = sys_getblksize(); int samplerate = sys_getsr(); if(!samplerate) return; t_fftease *fft = x->fft; if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ reset_required = 1; } if(fft->MSPVectorSize != maxvectorsize){ fft->MSPVectorSize = maxvectorsize; fftease_set_fft_buffers(fft); } if(fft->R != samplerate){ fft->R = samplerate; } if(reset_required){ thresher_init(x); } if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { dsp_add(thresher_perform, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec); } }
void *thresher_new(t_symbol *s, int argc, t_atom *argv) { #if MSP t_thresher *x = (t_thresher *)newobject(thresher_class); dsp_setup((t_pxobject *)x,3); outlet_new((t_pxobject *)x, "signal"); #endif #if PD t_thresher *x = (t_thresher *)pd_new(thresher_class); inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("signal"), gensym("signal")); inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("signal"), gensym("signal")); outlet_new(&x->x_obj, gensym("signal")); #endif x->move_threshold = atom_getfloatarg(0, argc, argv); x->damping_factor = atom_getfloatarg(1, argc, argv); x->overlap = atom_getfloatarg( 2, argc, argv ); x->winfac = atom_getfloatarg( 3, argc, argv ); // post("thresh %f damper %f overlap %d winfac %d", x->move_threshold, x->damping_factor, x->overlap, x->winfac); /* if overlap is zero we crash so should protect against bad input parameters*/ x->D = sys_getblksize(); x->R = sys_getsr(); thresher_init(x,0); return (x); }
void thresher_overlap(t_thresher *x, t_floatarg f) { int i = (int) f; if(!fftease_power_of_two(i)){ error("%f is not a power of two",f); return; } x->overlap = i; thresher_init(x,1); }
void thresher_winfac(t_thresher *x, t_floatarg f) { int i = (int)f; if(!fftease_power_of_two(i)){ error("%f is not a power of two",f); return; } x->winfac = i; thresher_init(x,2); }
void thresher_dsp(t_thresher *x, t_signal **sp, short *count) { #if MSP x->thresh_connected = count[1]; x->damping_connected = count[2]; #endif #if PD x->thresh_connected = 1; x->damping_connected = 1; #endif if(sp[0]->s_n != x->D || x->R != sp[0]->s_sr){ x->D = sp[0]->s_n; x->R = sp[0]->s_sr; thresher_init(x,1); } dsp_add(thresher_perform, 6, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec, sp[0]->s_n); }