aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--desiredata/src/builtins_dsp.c65
1 files changed, 14 insertions, 51 deletions
diff --git a/desiredata/src/builtins_dsp.c b/desiredata/src/builtins_dsp.c
index ddce3164..0b767de2 100644
--- a/desiredata/src/builtins_dsp.c
+++ b/desiredata/src/builtins_dsp.c
@@ -116,13 +116,11 @@ static void scalar##NAME##_dsp(t_scalarminus *x, t_signal **sp) { \
#define PERFORM(NAME,EXPR) \
t_int *NAME##_perform(t_int *w) { \
- t_float *in1 = (t_float *)w[1], *in2 = (t_float *)w[2], *out = (t_float *)w[3]; \
- int n = (int)w[4]; \
+ PERFORM4ARGS(t_float *,in1, t_float *,in2, t_float *,out, int,n); \
while (n--) {t_float a=*in1++, b=*in2++; *out++ = (EXPR);} \
return w+5;} \
t_int *NAME##_perf8(t_int *w) { \
- t_float *in1 = (t_float *)w[1], *in2 = (t_float *)w[2], *out = (t_float *)w[3]; \
- int n = (int)w[4]; \
+ PERFORM4ARGS(t_float *,in1, t_float *,in2, t_float *,out, int,n); \
for (; n; n -= 8, in1 += 8, in2 += 8, out += 8) { \
{t_float a=in1[0], b=in2[0]; out[0] = (EXPR);} \
{t_float a=in1[1], b=in2[1]; out[1] = (EXPR);} \
@@ -134,13 +132,11 @@ t_int *NAME##_perf8(t_int *w) { \
{t_float a=in1[7], b=in2[7]; out[7] = (EXPR);}} \
return w+5;} \
t_int *scalar##NAME##_perform(t_int *w) { \
- t_float *in = (t_float *)w[1]; t_float b = *(t_float *)w[2]; t_float *out = (t_float *)w[3]; \
- int n = (int)w[4]; \
+ PERFORM4ARGS(t_float *,in, t_float *,in2, t_float *,out, int,n); t_float b=*in2; \
while (n--) {t_float a=*in++; *out++ = (EXPR);} \
return w+5;} \
t_int *scalar##NAME##_perf8(t_int *w) { \
- t_float *in = (t_float *)w[1]; t_float b = *(t_float *)w[2]; t_float *out = (t_float *)w[3]; \
- int n = (int)w[4]; \
+ PERFORM4ARGS(t_float *,in, t_float *,in2, t_float *,out, int,n); t_float b=*in2; \
for (; n; n -= 8, in += 8, out += 8) { \
{t_float a=in[0]; out[0] = (EXPR);} \
{t_float a=in[1]; out[1] = (EXPR);} \
@@ -463,19 +459,6 @@ static t_int *tabread4_tilde_perform(t_int *w) {
float *buf = x->vec, *fp;
maxindex = x->npoints - 3;
if (!buf) goto zero;
-#if 0 /* test for spam -- I'm not ready to deal with this */
- for (i = 0, xmax = 0, xmin = maxindex, fp = in1; i < n; i++, fp++) {
- float f = *in1;
- if (f < xmin) xmin = f;
- else if (f > xmax) xmax = f;
- }
- if (xmax < xmin + x->c_maxextent) xmax = xmin + x->c_maxextent;
- for (i = 0, splitlo = xmin+ x->c_maxextent, splithi = xmax - x->c_maxextent,
- fp = in1; i < n; i++, fp++) {
- float f = *in1;
- if (f > splitlo && f < splithi) goto zero;
- }
-#endif
for (int i=0; i<n; i++) {
float findex = *in++;
int index = (int)findex;
@@ -562,7 +545,6 @@ static t_int *tabosc4_tilde_perform(t_int *w) {
if (!tab) {while (n--) *out++ = 0; return w+5;}
tf.d = UNITBIT32;
int normhipart = tf.i[HIOFFSET];
-#if 1
while (n--) {
tf.d = dphase;
dphase += *in++ * conv;
@@ -576,7 +558,6 @@ static t_int *tabosc4_tilde_perform(t_int *w) {
float cminusb = c-b;
*out++ = b + frac * (cminusb - 0.1666667f * (1.-frac) * ((d - a - 3.0f * cminusb) * frac + (d + 2.0f*a - 3.0f*b)));
}
-#endif
tf.d = UNITBIT32 * fnpoints;
normhipart = tf.i[HIOFFSET];
tf.d = dphase + (UNITBIT32 * fnpoints - UNITBIT32);
@@ -1671,12 +1652,10 @@ static void sigdelwrite_checkvecsize(t_sigdelwrite *x, int vecsize) {
x->vecsize = vecsize;
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. */
+ /* 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->vecsize)
- error("delread/delwrite/vd vector size mismatch");
+ else if (vecsize != x->vecsize) error("delread/delwrite/vd vector size mismatch");
#endif
}
static void *sigdelwrite_new(t_symbol *s, t_floatarg msec) {
@@ -3364,7 +3343,7 @@ static t_int *cos_perform(t_int *w) {
#if 0 /* this is the readable version of the code. */
while (n--) {
- dphase = (double)(*in++ * (float)(COSTABSIZE)) + UNITBIT32;
+ dphase = double(*in++ * float(COSTABSIZE)) + UNITBIT32;
tf.d = dphase;
addr = tab + (tf.i[HIOFFSET] & (COSTABSIZE-1));
tf.i[HIOFFSET] = normhipart;
@@ -3374,12 +3353,12 @@ static t_int *cos_perform(t_int *w) {
*out++ = f1 + frac * (f2 - f1);
}
#else /* this is the same, unwrapped by hand. */
- dphase = (double)(*in++ * (float)(COSTABSIZE)) + UNITBIT32;
+ dphase = double(*in++ * float(COSTABSIZE)) + UNITBIT32;
tf.d = dphase;
addr = tab + (tf.i[HIOFFSET] & (COSTABSIZE-1));
tf.i[HIOFFSET] = normhipart;
while (--n) {
- dphase = (double)(*in++ * (float)(COSTABSIZE)) + UNITBIT32;
+ dphase = double(*in++ * float(COSTABSIZE)) + UNITBIT32;
frac = tf.d - UNITBIT32;
tf.d = dphase;
f1 = addr[0];
@@ -3444,18 +3423,6 @@ static t_int *osc_perform(t_int *w) {
float conv = x->conv;
tf.d = UNITBIT32;
normhipart = tf.i[HIOFFSET];
-#if 0
- while (n--) {
- tf.d = dphase;
- dphase += *in++ * conv;
- addr = tab + (tf.i[HIOFFSET] & (COSTABSIZE-1));
- tf.i[HIOFFSET] = normhipart;
- frac = tf.d - UNITBIT32;
- f1 = addr[0];
- f2 = addr[1];
- *out++ = f1 + frac * (f2 - f1);
- }
-#else
tf.d = dphase;
dphase += *in++ * conv;
addr = tab + (tf.i[HIOFFSET] & (COSTABSIZE-1));
@@ -3468,13 +3435,12 @@ static t_int *osc_perform(t_int *w) {
f2 = addr[1];
addr = tab + (tf.i[HIOFFSET] & (COSTABSIZE-1));
tf.i[HIOFFSET] = normhipart;
- *out++ = f1 + frac * (f2 - f1);
+ *out++ = f1 + frac * (f2 - f1);
frac = tf.d - UNITBIT32;
}
f1 = addr[0];
f2 = addr[1];
*out++ = f1 + frac * (f2 - f1);
-#endif
tf.d = UNITBIT32 * COSTABSIZE;
normhipart = tf.i[HIOFFSET];
tf.d = dphase + (UNITBIT32 * COSTABSIZE - UNITBIT32);
@@ -3486,9 +3452,7 @@ static void osc_dsp(t_osc *x, t_signal **sp) {
x->conv = COSTABSIZE/sp[0]->sr;
dsp_add(osc_perform, 4, x, sp[0]->v, sp[1]->v, sp[0]->n);
}
-static void osc_ft1(t_osc *x, t_float f) {
- x->phase = COSTABSIZE * f;
-}
+static void osc_ft1(t_osc *x, t_float f) {x->phase = COSTABSIZE * f;}
static void osc_setup() {
osc_class = class_new2("osc~",osc_new,0,sizeof(t_osc),0,"F");
CLASS_MAINSIGNALIN(osc_class, t_osc, a);
@@ -3557,13 +3521,12 @@ static t_int *sigvcf_perform(t_int *w) {
addr = tab + tabindex;
tf.i[HIOFFSET] = normhipart;
frac = tf.d - UNITBIT32;
- f1 = addr[0]; f2 = addr[1]; coefr = r * (f1 + frac * (f2 - f1));
- addr = tab + ((tabindex - (COSTABSIZE/4)) & (COSTABSIZE-1));
+ f1 = addr[0]; f2 = addr[1]; coefr = r * (f1 + frac * (f2 - f1)); addr = tab + ((tabindex - (COSTABSIZE/4)) & (COSTABSIZE-1));
f1 = addr[0]; f2 = addr[1]; coefi = r * (f1 + frac * (f2 - f1));
f1 = *in1++;
re2 = re;
*out1++ = re = ampcorrect * oneminusr * f1 + coefr * re2 - coefi * im;
- *out2++ = im = coefi * re2 + coefr * im;
+ *out2++ = im = coefi * re2 + coefr * im;
}
if (PD_BIGORSMALL(re)) re = 0;
if (PD_BIGORSMALL(im)) im = 0;