4 extern int ugen_getsortno(void);
6 #define DEFDELVS 64 /* LATER get this from canvas at DSP time */
7 static int delread_zero
= 0; /* four bytes of zero for delread~, vd~ */
11 t_class
*sigdelwrite_class
;
13 static void *sigdelwrite_new(t_symbol
*s
, t_floatarg msec
)
16 t_sigdelwrite
*x
= (t_sigdelwrite
*)pd_new(sigdelwrite_class
);
17 if (!*s
->s_name
) s
= gensym("delwrite~");
18 pd_bind(&x
->x_obj
.ob_pd
, s
);
20 nsamps
= msec
* sys_getsr() * (float)(0.001f
);
21 if (nsamps
< 1) nsamps
= 1;
22 nsamps
+= ((- nsamps
) & (SAMPBLK
- 1));
24 x
->x_cspace
.c_n
= nsamps
;
26 (t_sample
*)getbytes((nsamps
+ XTRASAMPS
) * sizeof(float));
27 x
->x_cspace
.c_phase
= XTRASAMPS
;
34 static t_int
*sigdelwrite_perform(t_int
*w
)
36 t_sample
*in
= (t_sample
*)(w
[1]);
37 t_delwritectl
*c
= (t_delwritectl
*)(w
[2]);
39 int phase
= c
->c_phase
, nsamps
= c
->c_n
;
40 t_sample
*vp
= c
->c_vec
, *bp
= vp
+ phase
, *ep
= vp
+ (c
->c_n
+ XTRASAMPS
);
62 static void sigdelwrite_dsp(t_sigdelwrite
*x
, t_signal
**sp
)
64 dsp_add(sigdelwrite_perform
, 3, sp
[0]->s_vec
, &x
->x_cspace
, sp
[0]->s_n
);
65 x
->x_sortno
= ugen_getsortno();
66 sigdelwrite_checkvecsize(x
, sp
[0]->s_n
);
69 static void sigdelwrite_free(t_sigdelwrite
*x
)
71 pd_unbind(&x
->x_obj
.ob_pd
, x
->x_sym
);
72 freebytes(x
->x_cspace
.c_vec
,
73 (x
->x_cspace
.c_n
+ XTRASAMPS
) * sizeof(float));
76 void delwrite_tilde_setup(void)
78 sigdelwrite_class
= class_new(gensym("delwrite~"),
79 (t_newmethod
)sigdelwrite_new
, (t_method
)sigdelwrite_free
,
80 sizeof(t_sigdelwrite
), 0, A_DEFSYM
, A_DEFFLOAT
, 0);
81 CLASS_MAINSIGNALIN(sigdelwrite_class
, t_sigdelwrite
, x_f
);
82 class_addmethod(sigdelwrite_class
, (t_method
)sigdelwrite_dsp
,
88 extern int ugen_getsortno(void);
90 #define DEFDELVS 64 /* LATER get this from canvas at DSP time */
91 static int delread_zero
= 0; /* four bytes of zero for delread~, vd~ */
95 t_class
*sigdelwrite_class
;
97 static void *sigdelwrite_new(t_symbol
*s
, t_floatarg msec
)
100 t_sigdelwrite
*x
= (t_sigdelwrite
*)pd_new(sigdelwrite_class
);
101 if (!*s
->s_name
) s
= gensym("delwrite~");
102 pd_bind(&x
->x_obj
.ob_pd
, s
);
104 nsamps
= msec
* sys_getsr() * (float)(0.001f
);
105 if (nsamps
< 1) nsamps
= 1;
106 nsamps
+= ((- nsamps
) & (SAMPBLK
- 1));
108 x
->x_cspace
.c_n
= nsamps
;
110 (t_sample
*)getbytes((nsamps
+ XTRASAMPS
) * sizeof(float));
111 x
->x_cspace
.c_phase
= XTRASAMPS
;
118 static t_int
*sigdelwrite_perform(t_int
*w
)
120 t_sample
*in
= (t_sample
*)(w
[1]);
121 t_delwritectl
*c
= (t_delwritectl
*)(w
[2]);
123 int phase
= c
->c_phase
, nsamps
= c
->c_n
;
124 t_sample
*vp
= c
->c_vec
, *bp
= vp
+ phase
, *ep
= vp
+ (c
->c_n
+ XTRASAMPS
);
146 static void sigdelwrite_dsp(t_sigdelwrite
*x
, t_signal
**sp
)
148 dsp_add(sigdelwrite_perform
, 3, sp
[0]->s_vec
, &x
->x_cspace
, sp
[0]->s_n
);
149 x
->x_sortno
= ugen_getsortno();
150 sigdelwrite_checkvecsize(x
, sp
[0]->s_n
);
153 static void sigdelwrite_free(t_sigdelwrite
*x
)
155 pd_unbind(&x
->x_obj
.ob_pd
, x
->x_sym
);
156 freebytes(x
->x_cspace
.c_vec
,
157 (x
->x_cspace
.c_n
+ XTRASAMPS
) * sizeof(float));
160 void delwrite_tilde_setup(void)
162 sigdelwrite_class
= class_new(gensym("delwrite~"),
163 (t_newmethod
)sigdelwrite_new
, (t_method
)sigdelwrite_free
,
164 sizeof(t_sigdelwrite
), 0, A_DEFSYM
, A_DEFFLOAT
, 0);
165 CLASS_MAINSIGNALIN(sigdelwrite_class
, t_sigdelwrite
, x_f
);
166 class_addmethod(sigdelwrite_class
, (t_method
)sigdelwrite_dsp
,