void *leaker_new(t_symbol *msg, short argc, t_atom *argv) { #if MSP t_leaker *x = (t_leaker *)newobject(leaker_class); dsp_setup((t_pxobject *)x,3); outlet_new((t_pxobject *)x, "signal"); #endif #if PD t_leaker *x = (t_leaker *)pd_new(leaker_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->D = sys_getblksize(); x->R = sys_getsr(); if(!x->D) x->D = 256; if(!x->R) x->R = 44100; x->overlap = atom_getfloatarg(0,argc,argv); x->winfac = atom_getfloatarg(1,argc,argv); if(!x->overlap) x->overlap = 4; if(!x->winfac) x->winfac = 1; leaker_init(x,0); return (x); }
void leaker_dsp(t_leaker *x, t_signal **sp) { int reset_required = 0; int maxvectorsize = sys_getblksize(); int samplerate = sys_getsr(); t_fftease *fft = x->fft; t_fftease *fft2 = x->fft2; if(fft->R != samplerate || fft->MSPVectorSize != maxvectorsize || fft->initialized == 0){ reset_required = 1; } if(!samplerate) return; if(fft->MSPVectorSize != maxvectorsize){ fft->MSPVectorSize = maxvectorsize; fftease_set_fft_buffers(fft); fft2->MSPVectorSize = maxvectorsize; fftease_set_fft_buffers(fft2); } if(fft->R != samplerate ){ fft->R = samplerate; fft2->R = samplerate; } if(reset_required){ leaker_init(x); } if(fftease_msp_sanity_check(fft,OBJECT_NAME)) { dsp_add(leaker_perform, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec,sp[3]->s_vec); } }
void leaker_overlap(t_leaker *x, t_floatarg f) { int i = (int) f; if(!power_of_two(i)){ error("%f is not a power of two",f); return; } x->overlap = i; leaker_init(x,1); }
void leaker_winfac(t_leaker *x, t_floatarg f) { int i = (int)f; if(!power_of_two(i)){ error("%f is not a power of two",f); return; } x->winfac = i; leaker_init(x,2); }
void leaker_dsp(t_leaker *x, t_signal **sp, short *count) { long i; #if MSP x->fade_connected = count[2]; #endif if(x->R != sp[0]->s_sr || x->D != sp[0]->s_n){ x->R = sp[0]->s_sr; x->D = sp[0]->s_n; leaker_init(x,1); } dsp_add(leaker_perform, 6, x, sp[0]->s_vec,sp[1]->s_vec,sp[2]->s_vec,sp[3]->s_vec,sp[0]->s_n); }