You could simply start the patch with a delay which is what I did for a quick solution! Ingo
> Hi > > Thank you again, but what to do with it.....my problem is that i am > still "just" a patcher. i didn´t jet even find out how to compile on a > windows machine. .....sigh > > der.brandt > > > Zitat von "Mathieu Bouchard" <[email protected]>: > > > On Sun, 16 May 2010, [email protected] wrote: > > > >> Thanks to all of you and thank you mathieu for the workaround > > > > you actually don't need this workaround, because here's the fix : > > > > --- d_delay.c (révision 13558) > > +++ d_delay.c (copie de travail) > > @@ -24,6 +24,7 @@ > > { > > t_object x_obj; > > t_symbol *x_sym; > > + t_float x_deltime; /* delay in msec */ > > 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 */ > > @@ -34,6 +35,21 @@ > > #define XTRASAMPS 4 > > #define SAMPBLK 4 > > > > +static void sigdelwrite_updatesr (t_sigdelwrite *x, t_float sr) > > +{ > > + int nsamps = x->x_deltime * sr * (t_float)(0.001f); > > + if (nsamps < 1) nsamps = 1; > > + nsamps += ((- nsamps) & (SAMPBLK - 1)); > > + nsamps += DEFDELVS; > > + if (x->x_cspace.c_n != nsamps) { > > + x->x_cspace.c_vec = (t_sample *)resizebytes(x->x_cspace.c_vec, > > + (x->x_cspace.c_n + XTRASAMPS) * sizeof(t_sample), > > + ( nsamps + XTRASAMPS) * sizeof(t_sample)); > > + x->x_cspace.c_n = nsamps; > > + x->x_cspace.c_phase = XTRASAMPS; > > + } > > +} > > + > > /* routine to check that all delwrites/delreads/vds have same vecsize */ > > static void sigdelwrite_checkvecsize(t_sigdelwrite *x, int vecsize) > > { > > @@ -54,19 +70,13 @@ > > > > static void *sigdelwrite_new(t_symbol *s, t_floatarg msec) > > { > > - int nsamps; > > t_sigdelwrite *x = (t_sigdelwrite *)pd_new(sigdelwrite_class); > > if (!*s->s_name) s = gensym("delwrite~"); > > pd_bind(&x->x_obj.ob_pd, s); > > x->x_sym = s; > > - nsamps = msec * sys_getsr() * (t_float)(0.001f); > > - if (nsamps < 1) nsamps = 1; > > - nsamps += ((- nsamps) & (SAMPBLK - 1)); > > - nsamps += DEFDELVS; > > - x->x_cspace.c_n = nsamps; > > - x->x_cspace.c_vec = > > - (t_sample *)getbytes((nsamps + XTRASAMPS) * sizeof(t_sample)); > > - x->x_cspace.c_phase = XTRASAMPS; > > + x->x_deltime = msec; > > + x->x_cspace.c_n = 0; > > + x->x_cspace.c_vec = getbytes(XTRASAMPS * sizeof(t_sample)); > > x->x_sortno = 0; > > x->x_vecsize = 0; > > x->x_f = 0; > > @@ -109,6 +119,7 @@ > > dsp_add(sigdelwrite_perform, 3, sp[0]->s_vec, &x->x_cspace, sp[0]->s_n); > > x->x_sortno = ugen_getsortno(); > > sigdelwrite_checkvecsize(x, sp[0]->s_n); > > + sigdelwrite_updatesr(x, sp[0]->s_sr); > > } > > > > static void sigdelwrite_free(t_sigdelwrite *x) > > @@ -180,6 +191,7 @@ > > int delsamps = *(int *)(w[3]); > > int n = (int)(w[4]); > > int phase = c->c_phase - delsamps, nsamps = c->c_n; > > + > > t_sample *vp = c->c_vec, *bp, *ep = vp + (c->c_n + XTRASAMPS); > > if (phase < 0) phase += nsamps; > > bp = vp + phase; > > @@ -197,6 +209,7 @@ > > t_sigdelwrite *delwriter = > > (t_sigdelwrite *)pd_findbyclass(x->x_sym, sigdelwrite_class); > > x->x_sr = sp[0]->s_sr * 0.001; > > + sigdelwrite_updatesr(delwriter, sp[0]->s_sr); > > x->x_n = sp[0]->s_n; > > if (delwriter) > > { > > @@ -206,8 +219,7 @@ > > sigdelread_float(x, x->x_deltime); > > dsp_add(sigdelread_perform, 4, > > sp[0]->s_vec, &delwriter->x_cspace, &x->x_delsamps, sp[0]->s_n); > > - } > > - else if (*x->x_sym->s_name) > > + } else if (*x->x_sym->s_name) > > error("delread~: %s: no such delwrite~",x->x_sym->s_name); > > } > > > > _ _ __ ___ _____ ________ _____________ _____________________ ... > > | Mathieu Bouchard, Montréal, Québec. téléphone: +1.514.383.3801 _______________________________________________ [email protected] mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
