Update of /cvsroot/pure-data/pd/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3044
Modified Files: Tag: desiredata builtins_dsp.c Log Message: shrink
Index: builtins_dsp.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/Attic/builtins_dsp.c,v retrieving revision 1.1.2.14 retrieving revision 1.1.2.15 diff -C2 -d -r1.1.2.14 -r1.1.2.15 *** builtins_dsp.c 4 Jan 2007 23:21:24 -0000 1.1.2.14 --- builtins_dsp.c 4 Jan 2007 23:55:53 -0000 1.1.2.15 *************** *** 2650,2655 **** /* ---------------- bp~ - 2-pole bandpass filter. ----------------- */ struct t_bpctl { ! float c_x1; ! float c_x2; float c_coef1; float c_coef2; --- 2650,2655 ---- /* ---------------- bp~ - 2-pole bandpass filter. ----------------- */ struct t_bpctl { ! float x1; ! float x2; float c_coef1; float c_coef2; *************** *** 2673,2678 **** x->sr = 44100; x->ctl = &x->cspace; ! x->cspace.c_x1 = 0; ! x->cspace.c_x2 = 0; sigbp_docoef(x, f, q); x->a = 0; --- 2673,2678 ---- x->sr = 44100; x->ctl = &x->cspace; ! x->cspace.x1 = 0; ! x->cspace.x2 = 0; sigbp_docoef(x, f, q); x->a = 0; *************** *** 2704,2708 **** static void sigbp_ft1(t_sigbp *x, t_floatarg f) {sigbp_docoef(x, f, x->q);} static void sigbp_ft2(t_sigbp *x, t_floatarg q) {sigbp_docoef(x, x->freq, q);} ! static void sigbp_clear(t_sigbp *x, t_floatarg q) {x->ctl->c_x1 = x->ctl->c_x2 = 0;} static t_int *sigbp_perform(t_int *w) { float *in = (float *)w[1]; --- 2704,2708 ---- static void sigbp_ft1(t_sigbp *x, t_floatarg f) {sigbp_docoef(x, f, x->q);} static void sigbp_ft2(t_sigbp *x, t_floatarg q) {sigbp_docoef(x, x->freq, q);} ! static void sigbp_clear(t_sigbp *x, t_floatarg q) {x->ctl->x1 = x->ctl->x2 = 0;} static t_int *sigbp_perform(t_int *w) { float *in = (float *)w[1]; *************** *** 2710,2715 **** t_bpctl *c = (t_bpctl *)w[3]; int n = (t_int)w[4]; ! float last = c->c_x1; ! float prev = c->c_x2; float coef1 = c->c_coef1; float coef2 = c->c_coef2; --- 2710,2715 ---- t_bpctl *c = (t_bpctl *)w[3]; int n = (t_int)w[4]; ! float last = c->x1; ! float prev = c->x2; float coef1 = c->c_coef1; float coef2 = c->c_coef2; *************** *** 2723,2728 **** if (PD_BIGORSMALL(last)) last = 0; if (PD_BIGORSMALL(prev)) prev = 0; ! c->c_x1 = last; ! c->c_x2 = prev; return w+5; } --- 2723,2728 ---- if (PD_BIGORSMALL(last)) last = 0; if (PD_BIGORSMALL(prev)) prev = 0; ! c->x1 = last; ! c->x2 = prev; return w+5; } *************** *** 2744,2754 **** /* ---------------- biquad~ - raw biquad filter ----------------- */ struct t_biquadctl { ! float c_x1; ! float c_x2; ! float c_fb1; ! float c_fb2; ! float c_ff1; ! float c_ff2; ! float c_ff3; }; struct t_sigbiquad : t_object { --- 2744,2754 ---- /* ---------------- biquad~ - raw biquad filter ----------------- */ struct t_biquadctl { ! float x1; ! float x2; ! float fb1; ! float fb2; ! float ff1; ! float ff2; ! float ff3; }; struct t_sigbiquad : t_object { *************** *** 2763,2767 **** outlet_new(x, &s_signal); x->ctl = &x->cspace; ! x->cspace.c_x1 = x->cspace.c_x2 = 0; sigbiquad_list(x, s, argc, argv); x->a = 0; --- 2763,2767 ---- outlet_new(x, &s_signal); x->ctl = &x->cspace; ! x->cspace.x1 = x->cspace.x2 = 0; sigbiquad_list(x, s, argc, argv); x->a = 0; *************** *** 2773,2783 **** t_biquadctl *c = (t_biquadctl *)w[3]; int n = (t_int)w[4]; ! float last = c->c_x1; ! float prev = c->c_x2; ! float fb1 = c->c_fb1; ! float fb2 = c->c_fb2; ! float ff1 = c->c_ff1; ! float ff2 = c->c_ff2; ! float ff3 = c->c_ff3; for (int i = 0; i < n; i++) { float output = *in++ + fb1 * last + fb2 * prev; --- 2773,2783 ---- t_biquadctl *c = (t_biquadctl *)w[3]; int n = (t_int)w[4]; ! float last = c->x1; ! float prev = c->x2; ! float fb1 = c->fb1; ! float fb2 = c->fb2; ! float ff1 = c->ff1; ! float ff2 = c->ff2; ! float ff3 = c->ff3; for (int i = 0; i < n; i++) { float output = *in++ + fb1 * last + fb2 * prev; *************** *** 2787,2792 **** last = output; } ! c->c_x1 = last; ! c->c_x2 = prev; return w+5; } --- 2787,2792 ---- last = output; } ! c->x1 = last; ! c->x2 = prev; return w+5; } *************** *** 2798,2808 **** t_biquadctl *c = (t_biquadctl *)w[3]; int n = (t_int)w[4]>>3; ! float last = c->c_x1; ! float prev = c->c_x2; ! float fb1 = c->c_fb1; ! float fb2 = c->c_fb2; ! float ff1 = c->c_ff1; ! float ff2 = c->c_ff2; ! float ff3 = c->c_ff3; for (int i = 0; i < n; i++) { float output = *in++ + fb1*last + fb2*prev; --- 2798,2808 ---- t_biquadctl *c = (t_biquadctl *)w[3]; int n = (t_int)w[4]>>3; ! float last = c->x1; ! float prev = c->x2; ! float fb1 = c->fb1; ! float fb2 = c->fb2; ! float ff1 = c->ff1; ! float ff2 = c->ff2; ! float ff3 = c->ff3; for (int i = 0; i < n; i++) { float output = *in++ + fb1*last + fb2*prev; *************** *** 2820,2825 **** *out++ = ff1*output + ff2*last + ff3*prev; prev=last; last=output; } ! c->c_x1 = last; ! c->c_x2 = prev; return w+5; } --- 2820,2825 ---- *out++ = ff1*output + ff2*last + ff3*prev; prev=last; last=output; } ! c->x1 = last; ! c->x2 = prev; return w+5; } *************** *** 2845,2858 **** fb1 = fb2 = ff1 = ff2 = ff3 = 0; stable: ! c->c_fb1 = fb1; ! c->c_fb2 = fb2; ! c->c_ff1 = ff1; ! c->c_ff2 = ff2; ! c->c_ff3 = ff3; } static void sigbiquad_set(t_sigbiquad *x, t_symbol *s, int argc, t_atom *argv) { t_biquadctl *c = x->ctl; ! c->c_x1 = atom_getfloatarg(0, argc, argv); ! c->c_x2 = atom_getfloatarg(1, argc, argv); } static void sigbiquad_dsp(t_sigbiquad *x, t_signal **sp) { --- 2845,2858 ---- fb1 = fb2 = ff1 = ff2 = ff3 = 0; stable: ! c->fb1 = fb1; ! c->fb2 = fb2; ! c->ff1 = ff1; ! c->ff2 = ff2; ! c->ff3 = ff3; } static void sigbiquad_set(t_sigbiquad *x, t_symbol *s, int argc, t_atom *argv) { t_biquadctl *c = x->ctl; ! c->x1 = atom_getfloatarg(0, argc, argv); ! c->x2 = atom_getfloatarg(1, argc, argv); } static void sigbiquad_dsp(t_sigbiquad *x, t_signal **sp) { *************** *** 2907,2914 **** dsp_add(sigsamphold_perform, 5, sp[0]->v, sp[1]->v, sp[2]->v, x, sp[0]->n); } ! static void sigsamphold_reset(t_sigsamphold *x, t_symbol *s, int argc, ! t_atom *argv) { ! x->lastin = ((argc > 0 && (argv[0].a_type == A_FLOAT)) ? ! argv[0].a_w.w_float : 1e20); } static void sigsamphold_set(t_sigsamphold *x, t_float f) { --- 2907,2912 ---- dsp_add(sigsamphold_perform, 5, sp[0]->v, sp[1]->v, sp[2]->v, x, sp[0]->n); } ! static void sigsamphold_reset(t_sigsamphold *x, t_symbol *s, int argc, t_atom *argv) { ! x->lastin = ((argc > 0 && (argv[0].a_type == A_FLOAT)) ? argv[0].a_w.w_float : 1e20); } static void sigsamphold_set(t_sigsamphold *x, t_float f) { *************** *** 2931,2937 **** static void *sigrpole_new(t_float f) { t_sigrpole *x = (t_sigrpole *)pd_new(sigrpole_class); ! pd_float( ! (t_pd *)inlet_new(x, x, &s_signal, &s_signal), ! f); outlet_new(x, &s_signal); x->last = 0; --- 2929,2933 ---- static void *sigrpole_new(t_float f) { t_sigrpole *x = (t_sigrpole *)pd_new(sigrpole_class); ! pd_float((t_pd *)inlet_new(x, x, &s_signal, &s_signal), f); outlet_new(x, &s_signal); x->last = 0; *************** *** 3198,3205 **** float lastim = x->lastim; for (int i = 0; i < n; i++) { ! float nextre = *inre1++; ! float nextim = *inim1++; ! float coefre = *inre2++; ! float coefim = *inim2++; /* transfer function is (A bar) - Z^-1, for the same frequency response as 1 - AZ^-1 from czero_tilde. */ --- 3194,3199 ---- float lastim = x->lastim; for (int i = 0; i < n; i++) { ! float nextre = *inre1++, nextim = *inim1++; ! float coefre = *inre2++, coefim = *inim2++; /* transfer function is (A bar) - Z^-1, for the same frequency response as 1 - AZ^-1 from czero_tilde. */ *************** *** 3261,3270 **** static void sigsend_dsp(t_sigsend *x, t_signal **sp) { const int n = x->n; ! if(n == sp[0]->n) { ! if(SIMD_CHECK1(n,sp[0]->v)) /* x->vec is aligned in any case */ ! dsp_add(sigsend_perfsimd, 3, sp[0]->v, x->vec, n); ! else dsp_add(sigsend_perform, 3, sp[0]->v, x->vec, n); ! } ! else error("sigsend %s: unexpected vector size", x->sym->name); } static void sigsend_free(t_sigsend *x) { --- 3255,3262 ---- static void sigsend_dsp(t_sigsend *x, t_signal **sp) { const int n = x->n; ! if(n != sp[0]->n) {error("sigsend %s: unexpected vector size", x->sym->name); return;} ! if(SIMD_CHECK1(n,sp[0]->v)) /* x->vec is aligned in any case */ ! dsp_add(sigsend_perfsimd, 3, sp[0]->v, x->vec, n); ! else dsp_add(sigsend_perform, 3, sp[0]->v, x->vec, n); } static void sigsend_free(t_sigsend *x) { *************** *** 3339,3355 **** static void sigreceive_dsp(t_sigreceive *x, t_signal **sp) { const int n = x->n; ! if (sp[0]->n != n) { ! pd_error(x, "receive~ %s: vector size mismatch", x->sym->name); ! } else { ! sigreceive_set(x, x->sym); ! if(n&7) ! dsp_add(sigreceive_perform, 3, x, sp[0]->v, n); ! else ! if(SIMD_CHECK1(n,sp[0]->v)) ! /* x->wherefrom is aligned because we aligned the sender memory buffer */ ! dsp_add(sigreceive_perfsimd, 3, x, sp[0]->v, n); ! else ! dsp_add(sigreceive_perf8, 3, x, sp[0]->v, n); ! } } static void sigreceive_setup() { --- 3331,3341 ---- static void sigreceive_dsp(t_sigreceive *x, t_signal **sp) { const int n = x->n; ! if (sp[0]->n != n) {pd_error(x, "receive~ %s: vector size mismatch", x->sym->name); return;} ! sigreceive_set(x, x->sym); ! /* x->wherefrom is aligned because we aligned the sender memory buffer */ ! if(n&7) dsp_add(sigreceive_perform, 3, x, sp[0]->v, n); ! else if(SIMD_CHECK1(n,sp[0]->v)) ! dsp_add(sigreceive_perfsimd, 3, x, sp[0]->v, n); ! else dsp_add(sigreceive_perf8, 3, x, sp[0]->v, n); } static void sigreceive_setup() { *************** *** 3399,3412 **** static void sigcatch_dsp(t_sigcatch *x, t_signal **sp) { const int n = sp[0]->n; ! if (x->n == n) { ! if(n&7) ! dsp_add(sigcatch_perform, 3, x->vec, sp[0]->v, n); ! else ! if(SIMD_CHECK2(n,x->vec,sp[0]->v)) ! dsp_add(sigcatch_perfsimd, 3, x->vec, sp[0]->v, n); ! else ! dsp_add(sigcatch_perf8, 3, x->vec, sp[0]->v, n); ! } ! else error("sigcatch %s: unexpected vector size", x->sym->name); } static void sigcatch_free(t_sigcatch *x) { --- 3385,3393 ---- static void sigcatch_dsp(t_sigcatch *x, t_signal **sp) { const int n = sp[0]->n; ! if (x->n != n) {error("sigcatch %s: unexpected vector size", x->sym->name); return;} ! if(n&7) dsp_add(sigcatch_perform, 3, x->vec, sp[0]->v, n); ! else if(SIMD_CHECK2(n,x->vec,sp[0]->v)) ! dsp_add(sigcatch_perfsimd, 3, x->vec, sp[0]->v, n); ! else dsp_add(sigcatch_perf8, 3, x->vec, sp[0]->v, n); } static void sigcatch_free(t_sigcatch *x) { *************** *** 3440,3444 **** t_float *out = x->whereto; if(out) testaddvec(out,(t_float *)w[2],w[3]); - return w+4; } --- 3421,3424 ---- *************** *** 3451,3466 **** } static void sigthrow_set(t_sigthrow *x, t_symbol *s) { ! t_sigcatch *catcher = (t_sigcatch *)pd_findbyclass((x->sym = s), ! sigcatch_class); if (catcher) { if (catcher->n == x->n) x->whereto = catcher->vec; ! else { ! pd_error(x, "throw~ %s: vector size mismatch", x->sym->name); ! x->whereto = 0; ! } ! } else { ! pd_error(x, "throw~ %s: no matching catch", x->sym->name); ! x->whereto = 0; ! } } static void sigthrow_dsp(t_sigthrow *x, t_signal **sp) { --- 3431,3441 ---- } static void sigthrow_set(t_sigthrow *x, t_symbol *s) { ! x->sym = s; ! t_sigcatch *catcher = (t_sigcatch *)pd_findbyclass(s,sigcatch_class); ! x->whereto = 0; if (catcher) { if (catcher->n == x->n) x->whereto = catcher->vec; ! else pd_error(x, "throw~ %s: vector size mismatch", x->sym->name); ! } else pd_error(x, "throw~ %s: no matching catch", x->sym->name); } static void sigthrow_dsp(t_sigthrow *x, t_signal **sp) { *************** *** 3502,3511 **** const t_float lo = *(t_float *)w[3],hi = *(t_float *)w[4]; int n = (int)w[5]; ! while (n--) { ! float f = *in++; ! if (f < lo) f = lo; ! else if (f > hi) f = hi; ! *out++ = f; ! } return w+6; } --- 3477,3481 ---- const t_float lo = *(t_float *)w[3],hi = *(t_float *)w[4]; int n = (int)w[5]; ! while (n--) *out++ = clip(*in++,lo,hi); return w+6; } *************** *** 3513,3517 **** if(SIMD_CHECK2(sp[0]->n,sp[0]->v,sp[1]->v)) dsp_add(clip_perf_simd, 5, sp[0]->v, sp[1]->v, &x->lo, &x->hi, sp[0]->n); ! else dsp_add(clip_perform, 5, sp[0]->v, sp[1]->v, &x->lo, &x->hi, sp[0]->n); } static void clip_setup() { --- 3483,3487 ---- if(SIMD_CHECK2(sp[0]->n,sp[0]->v,sp[1]->v)) dsp_add(clip_perf_simd, 5, sp[0]->v, sp[1]->v, &x->lo, &x->hi, sp[0]->n); ! else dsp_add(clip_perform, 5, sp[0]->v, sp[1]->v, &x->lo, &x->hi, sp[0]->n); } static void clip_setup() { *************** *** 3570,3574 **** float *in = *(t_float **)(w+1), *out = *(t_float **)(w+2); t_int n = *(t_int *)(w+3); ! while (n--) { float f = *in; long l = *(long *)(in++); --- 3540,3544 ---- float *in = *(t_float **)(w+1), *out = *(t_float **)(w+2); t_int n = *(t_int *)(w+3); ! while (n--) { float f = *in; long l = *(long *)(in++); *************** *** 3576,3580 **** else { float g = rsqrt_exptab[(l >> 23) & 0xff] * ! rsqrt_mantissatab[(l >> 13) & 0x3ff]; *out++ = 1.5 * g - 0.5 * g * g * g * f; } --- 3546,3550 ---- else { float g = rsqrt_exptab[(l >> 23) & 0xff] * ! rsqrt_mantissatab[(l >> 13) & 0x3ff]; *out++ = 1.5 * g - 0.5 * g * g * g * f; } *************** *** 3669,3680 ****
/* ------------------------------ mtof_tilde~ and such -------------------------- */ - struct t_func1 : t_object {float a;}; ! t_class *mtof_tilde_class; ! t_class *ftom_tilde_class; ! t_class *dbtorms_tilde_class; ! t_class *rmstodb_tilde_class; ! t_class *dbtopow_tilde_class; ! t_class *powtodb_tilde_class;
static t_int *mtof_tilde_perform(t_int *w) { --- 3639,3646 ----
/* ------------------------------ mtof_tilde~ and such -------------------------- */ struct t_func1 : t_object {float a;}; ! t_class *mtof_tilde_class, *ftom_tilde_class; ! t_class *dbtorms_tilde_class, *rmstodb_tilde_class; ! t_class *dbtopow_tilde_class, *powtodb_tilde_class;
static t_int *mtof_tilde_perform(t_int *w) { *************** *** 3683,3695 **** for (; n--; in++, out++) { float f = *in; ! if (f <= -1500) *out = 0; ! else { ! if (f > 1499) f = 1499; ! *out = 8.17579891564 * exp(.0577622650 * f); ! } } return w+4; } - static t_int *ftom_tilde_perform(t_int *w) { float *in = *(t_float **)(w+1), *out = *(t_float **)(w+2); --- 3649,3656 ---- for (; n--; in++, out++) { float f = *in; ! *out = f<=-1500 ? 0 : 8.17579891564 * exp(.0577622650 * min(f,1499.f)); } return w+4; } static t_int *ftom_tilde_perform(t_int *w) { float *in = *(t_float **)(w+1), *out = *(t_float **)(w+2); *************** *** 3704,3712 **** for (t_int n = *(t_int *)(w+3); n--; in++, out++) { float f = *in; ! if (f <= 0) *out = 0; ! else { ! if (f > 485) f = 485; ! *out = exp((LOGTEN * 0.05) * (f-100.)); ! } } return w+4; --- 3665,3669 ---- for (t_int n = *(t_int *)(w+3); n--; in++, out++) { float f = *in; ! *out = f<=0 ? 0 : exp((LOGTEN * 0.05) * (min(f,485.f)-100.)); } return w+4; *************** *** 3716,3724 **** for (t_int n = *(t_int *)(w+3); n--; in++, out++) { float f = *in; ! if (f <= 0) *out = 0; ! else { ! float g = 100 + 20./LOGTEN * log(f); ! *out = (g < 0 ? 0 : g); ! } } return w+4; --- 3673,3677 ---- for (t_int n = *(t_int *)(w+3); n--; in++, out++) { float f = *in; ! *out = f<=0 ? 0 : max(100 + 20./LOGTEN * log(f),0.); } return w+4; *************** *** 3728,3736 **** for (t_int n = *(t_int *)(w+3); n--; in++, out++) { float f = *in; ! if (f <= 0) *out = 0; ! else { ! if (f > 870) f = 870; ! *out = exp((LOGTEN * 0.1) * (f-100.)); ! } } return w+4; --- 3681,3685 ---- for (t_int n = *(t_int *)(w+3); n--; in++, out++) { float f = *in; ! *out = f<=0 ? 0 : exp((LOGTEN * 0.1) * (min(f,870.f)-100.)); } return w+4; *************** *** 3740,3797 **** for (t_int n = *(t_int *)(w+3); n--; in++, out++) { float f = *in; ! if (f <= 0) *out = 0; ! else { ! float g = 100 + 10./LOGTEN * log(f); ! *out = (g < 0 ? 0 : g); ! } } return w+4; }
! static void *mtof_tilde_new() {t_func1 *x = (t_func1 *)pd_new(mtof_tilde_class); ! outlet_new(x, gensym("signal")); x->a = 0; return x;} ! static void *ftom_tilde_new() {t_func1 *x = (t_func1 *)pd_new(ftom_tilde_class); ! outlet_new(x, gensym("signal")); x->a = 0; return x;} ! static void *dbtorms_tilde_new() {t_func1 *x = (t_func1 *)pd_new(dbtorms_tilde_class); ! outlet_new(x, gensym("signal")); x->a = 0; return x;} ! static void *rmstodb_tilde_new() {t_func1 *x = (t_func1 *)pd_new(rmstodb_tilde_class); ! outlet_new(x, gensym("signal")); x->a = 0; return x;} ! static void *dbtopow_tilde_new() {t_func1 *x = (t_func1 *)pd_new(dbtopow_tilde_class); ! outlet_new(x, gensym("signal")); x->a = 0; return x;} ! static void *powtodb_tilde_new() {t_func1 *x = (t_func1 *)pd_new(powtodb_tilde_class); ! outlet_new(x, gensym("signal")); x->a = 0; return x;}
! static void mtof_tilde_dsp(t_func1 *x, t_signal **sp) { ! dsp_add( mtof_tilde_perform, 3, sp[0]->v, sp[1]->v, sp[0]->n);} ! static void ftom_tilde_dsp(t_func1 *x, t_signal **sp) { ! dsp_add( ftom_tilde_perform, 3, sp[0]->v, sp[1]->v, sp[0]->n);} ! static void dbtorms_tilde_dsp(t_func1 *x, t_signal **sp) { ! dsp_add(dbtorms_tilde_perform, 3, sp[0]->v, sp[1]->v, sp[0]->n);} ! static void rmstodb_tilde_dsp(t_func1 *x, t_signal **sp) { ! dsp_add(rmstodb_tilde_perform, 3, sp[0]->v, sp[1]->v, sp[0]->n);} ! static void dbtopow_tilde_dsp(t_func1 *x, t_signal **sp) { ! dsp_add(dbtopow_tilde_perform, 3, sp[0]->v, sp[1]->v, sp[0]->n);} ! static void powtodb_tilde_dsp(t_func1 *x, t_signal **sp) { ! dsp_add(powtodb_tilde_perform, 3, sp[0]->v, sp[1]->v, sp[0]->n);}
void mtof_tilde_setup() { ! mtof_tilde_class = class_new2("mtof~",mtof_tilde_new,0,sizeof(t_func1),0,""); ! CLASS_MAINSIGNALIN(mtof_tilde_class,t_func1,a); ! class_addmethod2(mtof_tilde_class, mtof_tilde_dsp, "dsp",""); ! ftom_tilde_class = class_new2("ftom~",ftom_tilde_new,0,sizeof(t_func1),0,""); ! CLASS_MAINSIGNALIN(ftom_tilde_class,t_func1,a); ! class_addmethod2(ftom_tilde_class, ftom_tilde_dsp, "dsp",""); ! dbtorms_tilde_class = class_new2("dbtorms~",dbtorms_tilde_new,0,sizeof(t_func1),0,""); ! CLASS_MAINSIGNALIN(dbtorms_tilde_class,t_func1,a); ! class_addmethod2(dbtorms_tilde_class, dbtorms_tilde_dsp, "dsp",""); ! rmstodb_tilde_class = class_new2("rmstodb~",rmstodb_tilde_new,0,sizeof(t_func1),0,""); ! CLASS_MAINSIGNALIN(rmstodb_tilde_class,t_func1,a); ! class_addmethod2(rmstodb_tilde_class, rmstodb_tilde_dsp, "dsp",""); ! dbtopow_tilde_class = class_new2("dbtopow~",dbtopow_tilde_new,0,sizeof(t_func1),0,""); ! CLASS_MAINSIGNALIN(dbtopow_tilde_class,t_func1,a); ! class_addmethod2(dbtopow_tilde_class, dbtopow_tilde_dsp, "dsp",""); ! powtodb_tilde_class = class_new2("powtodb~",powtodb_tilde_new,0,sizeof(t_func1),0,""); ! CLASS_MAINSIGNALIN(powtodb_tilde_class,t_func1,a); ! class_addmethod2(powtodb_tilde_class, powtodb_tilde_dsp, "dsp",""); t_symbol *s = gensym("acoustics~.pd"); class_sethelpsymbol(mtof_tilde_class, s); --- 3689,3721 ---- for (t_int n = *(t_int *)(w+3); n--; in++, out++) { float f = *in; ! *out = f<=0 ? 0 : max(100 + 10./LOGTEN * log(f),0.); } return w+4; }
! #define FUNC1(NAME) \ ! static void *NAME##_new() {t_func1 *x = (t_func1 *)pd_new(NAME##_class); \ ! outlet_new(x,&s_signal); x->a = 0; return x;} \ ! static void NAME##_dsp(t_func1 *x, t_signal **sp) { \ ! dsp_add(NAME##_perform, 3, sp[0]->v, sp[1]->v, sp[0]->n);} ! FUNC1(mtof_tilde) ! FUNC1(ftom_tilde) ! FUNC1(dbtorms_tilde) ! FUNC1(dbtopow_tilde) ! FUNC1(rmstodb_tilde) ! FUNC1(powtodb_tilde)
! #define FUNC1DECL(NAME,SYM) \ ! NAME##_class = class_new2(SYM,NAME##_new,0,sizeof(t_func1),0,""); \ ! CLASS_MAINSIGNALIN(NAME##_class,t_func1,a); \ ! class_addmethod2(NAME##_class, NAME##_dsp, "dsp","");
void mtof_tilde_setup() { ! FUNC1DECL(mtof_tilde,"mtof~") ! FUNC1DECL(ftom_tilde,"ftom~") ! FUNC1DECL(dbtorms_tilde,"dbtorms~") ! FUNC1DECL(dbtopow_tilde,"dbtopow~") ! FUNC1DECL(rmstodb_tilde,"rmstodb~") ! FUNC1DECL(powtodb_tilde,"powtodb~") t_symbol *s = gensym("acoustics~.pd"); class_sethelpsymbol(mtof_tilde_class, s); *************** *** 3831,3841 **** dsp_add(print_perform, 3, x, sp[0]->v, sp[0]->n); } ! static void print_float(t_print *x, t_float f) { ! if (f < 0) f = 0; ! x->count = (int)f; ! } ! static void print_bang(t_print *x) { ! x->count = 1; ! } static void *print_new(t_symbol *s) { t_print *x = (t_print *)pd_new(print_class); --- 3755,3760 ---- dsp_add(print_perform, 3, x, sp[0]->v, sp[0]->n); } ! static void print_float(t_print *x, t_float f) {x->count = max(0,(int)f);} ! static void print_bang(t_print *x) {x->count = 1;} static void *print_new(t_symbol *s) { t_print *x = (t_print *)pd_new(print_class); *************** *** 3863,3875 **** return w+2; } ! static void bang_tilde_dsp(t_bang *x, t_signal **sp) { ! dsp_add(bang_tilde_perform, 1, x); ! } ! static void bang_tilde_tick(t_bang *x) { ! outlet_bang(x->outlet); ! } ! static void bang_tilde_free(t_bang *x) { ! clock_free(x->clock); ! } static void *bang_tilde_new(t_symbol *s) { t_bang *x = (t_bang *)pd_new(bang_tilde_class); --- 3782,3788 ---- return w+2; } ! static void bang_tilde_dsp(t_bang *x, t_signal **sp) {dsp_add(bang_tilde_perform, 1, x);} ! static void bang_tilde_tick(t_bang *x) {outlet_bang(x->outlet);} ! static void bang_tilde_free(t_bang *x) {clock_free(x->clock);} static void *bang_tilde_new(t_symbol *s) { t_bang *x = (t_bang *)pd_new(bang_tilde_class); *************** *** 3979,3988 **** while (--n) { dphase = (double)(*in++ * (float)(COSTABSIZE)) + UNITBIT32; ! frac = tf.tf_d - UNITBIT32; tf.tf_d = dphase; ! f1 = addr[0]; ! f2 = addr[1]; addr = tab + (tf.tf_i[HIOFFSET] & (COSTABSIZE-1)); ! *out++ = f1 + frac * (f2 - f1); tf.tf_i[HIOFFSET] = normhipart; } --- 3892,3901 ---- while (--n) { dphase = (double)(*in++ * (float)(COSTABSIZE)) + UNITBIT32; ! frac = tf.tf_d - UNITBIT32; tf.tf_d = dphase; ! f1 = addr[0]; ! f2 = addr[1]; addr = tab + (tf.tf_i[HIOFFSET] & (COSTABSIZE-1)); ! *out++ = f1 + frac * (f2 - f1); tf.tf_i[HIOFFSET] = normhipart; } *************** *** 4203,4207 **** t_noise *x = (t_noise *)pd_new(noise_class); static int init = 307; ! x->val = (init *= 1319); outlet_new(x, gensym("signal")); return x; --- 4116,4120 ---- t_noise *x = (t_noise *)pd_new(noise_class); static int init = 307; ! x->val = (init *= 1319); outlet_new(x, gensym("signal")); return x; *************** *** 4213,4218 **** int val = *vp; while (n--) { ! *out++ = ((float)((val & 0x7fffffff) - 0x40000000)) * ! (float)(1.0 / 0x40000000); val = val * 435898247 + 382842987; } --- 4126,4130 ---- int val = *vp; while (n--) { ! *out++ = ((float)((val & 0x7fffffff) - 0x40000000)) * (float)(1.0 / 0x40000000); val = val * 435898247 + 382842987; }