typedef struct delwritectl { int c_n; t_sample *c_vec; int c_phase; } t_delwritectl; typedef struct _sigdelwrite { t_object x_obj; t_symbol *x_sym; t_delwritectl x_cspace; int x_sortno; /* DSP sort number at which this was last put on chain */ int x_rsortno; /* DSP sort # for first delread or write in chain */ int x_vecsize; /* vector size for delread~ to use */ t_float x_f; } t_sigdelwrite; t_class *sigdelwrite_class; extern int ugen_getsortno(void); #define DEFDELVS 64 /* LATER get this from canvas at DSP time */ #define XTRASAMPS 4 #define SAMPBLK 4 /* routine to check that all delwrites/delreads/vds have same vecsize */ void sigdelwrite_checkvecsize(t_sigdelwrite *x, int vecsize) { if (x->x_rsortno != ugen_getsortno()) { x->x_vecsize = vecsize; x->x_rsortno = ugen_getsortno(); } /* LATER this should really check sample rate and blocking, once that is supported. Probably we don't actually care about vecsize. For now just suppress this check. */ #if 0 else if (vecsize != x->x_vecsize) pd_error(x, "delread/delwrite/vd vector size mismatch"); #endif }