summaryrefslogtreecommitdiff
path: root/apps/plugins/pdbox/PDa/intern/lop~.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins/pdbox/PDa/intern/lop~.c')
-rw-r--r--apps/plugins/pdbox/PDa/intern/lop~.c89
1 files changed, 0 insertions, 89 deletions
diff --git a/apps/plugins/pdbox/PDa/intern/lop~.c b/apps/plugins/pdbox/PDa/intern/lop~.c
index 49a17a7c5f..9d36091711 100644
--- a/apps/plugins/pdbox/PDa/intern/lop~.c
+++ b/apps/plugins/pdbox/PDa/intern/lop~.c
@@ -88,93 +88,4 @@ void lop_tilde_setup(void)
88 gensym("ft1"), A_FLOAT, 0); 88 gensym("ft1"), A_FLOAT, 0);
89 class_addmethod(siglop_class, (t_method)siglop_clear, gensym("clear"), 0); 89 class_addmethod(siglop_class, (t_method)siglop_clear, gensym("clear"), 0);
90} 90}
91#include <m_pd.h>
92#include <m_fixed.h>
93
94typedef struct lopctl
95{
96 t_sample c_x;
97 t_sample c_coef;
98} t_lopctl;
99
100typedef struct siglop
101{
102 t_object x_obj;
103 float x_sr;
104 float x_hz;
105 t_lopctl x_cspace;
106 t_lopctl *x_ctl;
107 float x_f;
108} t_siglop;
109
110t_class *siglop_class;
111
112static void siglop_ft1(t_siglop *x, t_floatarg f);
113
114static void *siglop_new(t_floatarg f)
115{
116 t_siglop *x = (t_siglop *)pd_new(siglop_class);
117 inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("float"), gensym("ft1"));
118 outlet_new(&x->x_obj, gensym("signal"));
119 x->x_sr = 44100;
120 x->x_ctl = &x->x_cspace;
121 x->x_cspace.c_x = 0;
122 siglop_ft1(x, f);
123 x->x_f = 0;
124 return (x);
125}
126
127static void siglop_ft1(t_siglop *x, t_floatarg f)
128{
129 t_float coeff;
130 if (f < 0.001) f = 10;
131 x->x_hz = f;
132 coeff = f * (2 * 3.14159) / x->x_sr;
133 if (coeff > 1) coeff = 1;
134 x->x_ctl->c_coef = ftofix(coeff);
135}
136 91
137static void siglop_clear(t_siglop *x, t_floatarg q)
138{
139 x->x_cspace.c_x = 0;
140}
141
142
143static t_int *siglop_perform(t_int *w)
144{
145 t_sample *in = (t_sample *)(w[1]);
146 t_sample *out = (t_sample *)(w[2]);
147 t_lopctl *c = (t_lopctl *)(w[3]);
148 int n = (t_int)(w[4]);
149 int i;
150 t_sample last = c->c_x;
151 t_sample coef = c->c_coef;
152 t_sample feedback = ftofix(1) - coef;
153 for (i = 0; i < n; i++)
154 last = *out++ = mult(coef, *in++) + mult(feedback,last);
155 if (PD_BADFLOAT(last))
156 last = 0;
157 c->c_x = last;
158 return (w+5);
159}
160
161static void siglop_dsp(t_siglop *x, t_signal **sp)
162{
163 x->x_sr = sp[0]->s_sr;
164 siglop_ft1(x, x->x_hz);
165 dsp_add(siglop_perform, 4,
166 sp[0]->s_vec, sp[1]->s_vec,
167 x->x_ctl, sp[0]->s_n);
168
169}
170
171void lop_tilde_setup(void)
172{
173 siglop_class = class_new(gensym("lop~"), (t_newmethod)siglop_new, 0,
174 sizeof(t_siglop), 0, A_DEFFLOAT, 0);
175 CLASS_MAINSIGNALIN(siglop_class, t_siglop, x_f);
176 class_addmethod(siglop_class, (t_method)siglop_dsp, gensym("dsp"), 0);
177 class_addmethod(siglop_class, (t_method)siglop_ft1,
178 gensym("ft1"), A_FLOAT, 0);
179 class_addmethod(siglop_class, (t_method)siglop_clear, gensym("clear"), 0);
180}