diff options
author | Cyrille Henry <nusmuk@users.sourceforge.net> | 2010-11-10 16:18:30 +0000 |
---|---|---|
committer | Cyrille Henry <nusmuk@users.sourceforge.net> | 2010-11-10 16:18:30 +0000 |
commit | 8f75adf8bcea9e8c52d07d11ac35b93a8bf8dd32 (patch) | |
tree | 452682c0cbcdc12bca9ca451abe54d68f4129836 /nusmuk_audio/bq~.c | |
parent | 32defffd77d6b55bcbef3979ae4e0b10e1baed1a (diff) |
rename
svn path=/trunk/externals/nusmuk/; revision=14367
Diffstat (limited to 'nusmuk_audio/bq~.c')
-rw-r--r-- | nusmuk_audio/bq~.c | 112 |
1 files changed, 0 insertions, 112 deletions
diff --git a/nusmuk_audio/bq~.c b/nusmuk_audio/bq~.c deleted file mode 100644 index d8a70b4..0000000 --- a/nusmuk_audio/bq~.c +++ /dev/null @@ -1,112 +0,0 @@ -/* Copyright (c) 1997-1999 Miller Puckette. -* For information on usage and redistribution, and for a DISCLAIMER OF ALL -* WARRANTIES, see the file, "LICENSE.txt," in this distribution. */ - -// modification of this code by cyrille henry in order to change the biquad topology and add audio inlet for filter coefs - -#include "m_pd.h" -#include <math.h> - -/* ---------------- bq~ - raw bq filter ----------------- */ - -typedef struct bqctl -{ - t_sample c_x1; - t_sample c_x2; - t_sample c_y1; - t_sample c_y2; -} t_bqctl; - -typedef struct bq_tilde -{ - t_object x_obj; - t_float x_f; - t_bqctl x_cspace; - t_bqctl *x_ctl; -} t_bq_tilde; - -t_class *bq_tilde_class; - -static void *bq_tilde_new(t_symbol *s, int argc, t_atom *argv) -{ - t_bq_tilde *x = (t_bq_tilde *)pd_new(bq_tilde_class); - inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal); - inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal); - inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal); - inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal); - inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal); - outlet_new(&x->x_obj, &s_signal); - x->x_ctl = &x->x_cspace; - x->x_cspace.c_x1 = x->x_cspace.c_x2 = 0; - x->x_cspace.c_y1 = x->x_cspace.c_y2 = 0; - x->x_f = 0; - return (x); -} - -static t_int *bq_tilde_perform(t_int *w) -{ - t_sample *in = (t_sample *)(w[1]); - t_sample *ina1 = (t_sample *)(w[2]); - t_sample *ina2 = (t_sample *)(w[3]); - t_sample *inb1 = (t_sample *)(w[4]); - t_sample *inb2 = (t_sample *)(w[5]); - t_sample *inb3 = (t_sample *)(w[6]); - t_sample *out = (t_sample *)(w[7]); - t_bqctl *c = (t_bqctl *)(w[8]); - int n = (t_int)(w[9]); - int i; - t_sample last_in = c->c_x1; - t_sample prev_in = c->c_x2; - t_sample last_out = c->c_y1; - t_sample prev_out = c->c_y2; - - for (i = 0; i < n; i++) - { - t_sample output = *inb1++ * *in + *inb2++ * last_in + *inb3++ * prev_in - *ina1++ * last_out - *ina2++ * prev_out; -// if (PD_BIGORSMALL(output)) -// output = 0; i don't understnd why it did not compile with this 2 lines. -// should be fixed latter if denormal is a problem - *out++ = output; - prev_in = last_in; - prev_out = last_out; - last_out = output; - last_in = *in++; - } - c->c_x1 = last_in; - c->c_x2 = prev_in; - c->c_y1 = last_out; - c->c_y2 = prev_out; - - return (w+10); -} - -static void bq_tilde_set(t_bq_tilde *x, t_symbol *s, int argc, t_atom *argv) -{ - t_bqctl *c = x->x_ctl; - c->c_x1 = atom_getfloatarg(0, argc, argv); - c->c_x2 = atom_getfloatarg(1, argc, argv); - c->c_y1 = atom_getfloatarg(2, argc, argv); - c->c_y2 = atom_getfloatarg(3, argc, argv); -} - -static void bq_tilde_dsp(t_bq_tilde *x, t_signal **sp) -{ - dsp_add(bq_tilde_perform, 9, - sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec, sp[4]->s_vec, - sp[5]->s_vec, sp[6]->s_vec, x->x_ctl, sp[0]->s_n); - -} - -void bq_tilde_setup(void) -{ - bq_tilde_class = class_new(gensym("bq~"), (t_newmethod)bq_tilde_new, - 0, sizeof(t_bq_tilde), 0, A_GIMME, 0); - CLASS_MAINSIGNALIN(bq_tilde_class, t_bq_tilde, x_f); - class_addmethod(bq_tilde_class, (t_method)bq_tilde_dsp, gensym("dsp"), 0); - class_addmethod(bq_tilde_class, (t_method)bq_tilde_set, gensym("set"), - A_GIMME, 0); - class_addmethod(bq_tilde_class, (t_method)bq_tilde_set, gensym("clear"), - A_GIMME, 0); -} - - |