diff options
Diffstat (limited to 'apps/plugins/pdbox/PDa/intern/lop~.c')
-rw-r--r-- | apps/plugins/pdbox/PDa/intern/lop~.c | 89 |
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 | |||
94 | typedef struct lopctl | ||
95 | { | ||
96 | t_sample c_x; | ||
97 | t_sample c_coef; | ||
98 | } t_lopctl; | ||
99 | |||
100 | typedef 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 | |||
110 | t_class *siglop_class; | ||
111 | |||
112 | static void siglop_ft1(t_siglop *x, t_floatarg f); | ||
113 | |||
114 | static 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 | |||
127 | static 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 | ||
137 | static void siglop_clear(t_siglop *x, t_floatarg q) | ||
138 | { | ||
139 | x->x_cspace.c_x = 0; | ||
140 | } | ||
141 | |||
142 | |||
143 | static 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 | |||
161 | static 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 | |||
171 | void 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 | } | ||