diff options
author | Peter D'Hoye <peter.dhoye@gmail.com> | 2009-05-24 21:28:16 +0000 |
---|---|---|
committer | Peter D'Hoye <peter.dhoye@gmail.com> | 2009-05-24 21:28:16 +0000 |
commit | 526b5580dabbfed7cfe5439dc3a90ec727f563c2 (patch) | |
tree | 22b1af92348785daad16714ee5e2b633017e0e48 /apps/plugins/pdbox/PDa/intern/tabplay~.c | |
parent | 4f2dfcc01b260d946044ef2b6af5fe36cb772c8d (diff) | |
download | rockbox-526b5580dabbfed7cfe5439dc3a90ec727f563c2.tar.gz rockbox-526b5580dabbfed7cfe5439dc3a90ec727f563c2.zip |
Cut the files in half and it might work better (note to self: check your tree is really clean before patching)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21070 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins/pdbox/PDa/intern/tabplay~.c')
-rw-r--r-- | apps/plugins/pdbox/PDa/intern/tabplay~.c | 131 |
1 files changed, 0 insertions, 131 deletions
diff --git a/apps/plugins/pdbox/PDa/intern/tabplay~.c b/apps/plugins/pdbox/PDa/intern/tabplay~.c index c0032a1e12..5ac0d2701a 100644 --- a/apps/plugins/pdbox/PDa/intern/tabplay~.c +++ b/apps/plugins/pdbox/PDa/intern/tabplay~.c | |||
@@ -131,134 +131,3 @@ void tabplay_tilde_setup(void) | |||
131 | class_addlist(tabplay_tilde_class, tabplay_tilde_list); | 131 | class_addlist(tabplay_tilde_class, tabplay_tilde_list); |
132 | } | 132 | } |
133 | 133 | ||
134 | #define FIXEDPOINT | ||
135 | #include <m_pd.h> | ||
136 | #include <m_fixed.h> | ||
137 | |||
138 | static t_class *tabplay_tilde_class; | ||
139 | |||
140 | typedef struct _tabplay_tilde | ||
141 | { | ||
142 | t_object x_obj; | ||
143 | t_outlet *x_bangout; | ||
144 | int x_phase; | ||
145 | int x_nsampsintab; | ||
146 | int x_limit; | ||
147 | t_sample *x_vec; | ||
148 | t_symbol *x_arrayname; | ||
149 | t_clock *x_clock; | ||
150 | } t_tabplay_tilde; | ||
151 | |||
152 | static void tabplay_tilde_tick(t_tabplay_tilde *x); | ||
153 | |||
154 | static void *tabplay_tilde_new(t_symbol *s) | ||
155 | { | ||
156 | t_tabplay_tilde *x = (t_tabplay_tilde *)pd_new(tabplay_tilde_class); | ||
157 | x->x_clock = clock_new(x, (t_method)tabplay_tilde_tick); | ||
158 | x->x_phase = 0x7fffffff; | ||
159 | x->x_limit = 0; | ||
160 | x->x_arrayname = s; | ||
161 | outlet_new(&x->x_obj, &s_signal); | ||
162 | x->x_bangout = outlet_new(&x->x_obj, &s_bang); | ||
163 | return (x); | ||
164 | } | ||
165 | |||
166 | static t_int *tabplay_tilde_perform(t_int *w) | ||
167 | { | ||
168 | t_tabplay_tilde *x = (t_tabplay_tilde *)(w[1]); | ||
169 | t_sample *out = (t_sample *)(w[2]), *fp; | ||
170 | int n = (int)(w[3]), phase = x->x_phase, | ||
171 | endphase = (x->x_nsampsintab < x->x_limit ? | ||
172 | x->x_nsampsintab : x->x_limit), nxfer, n3; | ||
173 | if (!x->x_vec || phase >= endphase) | ||
174 | goto zero; | ||
175 | |||
176 | nxfer = endphase - phase; | ||
177 | fp = x->x_vec + phase; | ||
178 | if (nxfer > n) | ||
179 | nxfer = n; | ||
180 | n3 = n - nxfer; | ||
181 | phase += nxfer; | ||
182 | while (nxfer--) | ||
183 | *out++ = *fp++; | ||
184 | if (phase >= endphase) | ||
185 | { | ||
186 | clock_delay(x->x_clock, 0); | ||
187 | x->x_phase = 0x7fffffff; | ||
188 | while (n3--) | ||
189 | *out++ = 0; | ||
190 | } | ||
191 | else x->x_phase = phase; | ||
192 | |||
193 | return (w+4); | ||
194 | zero: | ||
195 | while (n--) *out++ = 0; | ||
196 | return (w+4); | ||
197 | } | ||
198 | |||
199 | void tabplay_tilde_set(t_tabplay_tilde *x, t_symbol *s) | ||
200 | { | ||
201 | t_garray *a; | ||
202 | |||
203 | x->x_arrayname = s; | ||
204 | if (!(a = (t_garray *)pd_findbyclass(x->x_arrayname, garray_class))) | ||
205 | { | ||
206 | if (*s->s_name) pd_error(x, "tabplay~: %s: no such array", | ||
207 | x->x_arrayname->s_name); | ||
208 | x->x_vec = 0; | ||
209 | } | ||
210 | else if (!garray_getfloatarray(a, &x->x_nsampsintab, &x->x_vec)) | ||
211 | { | ||
212 | error("%s: bad template for tabplay~", x->x_arrayname->s_name); | ||
213 | x->x_vec = 0; | ||
214 | } | ||
215 | else garray_usedindsp(a); | ||
216 | } | ||
217 | |||
218 | static void tabplay_tilde_dsp(t_tabplay_tilde *x, t_signal **sp) | ||
219 | { | ||
220 | tabplay_tilde_set(x, x->x_arrayname); | ||
221 | dsp_add(tabplay_tilde_perform, 3, x, sp[0]->s_vec, sp[0]->s_n); | ||
222 | } | ||
223 | |||
224 | static void tabplay_tilde_list(t_tabplay_tilde *x, t_symbol *s, | ||
225 | int argc, t_atom *argv) | ||
226 | { | ||
227 | long start = atom_getfloatarg(0, argc, argv); | ||
228 | long length = atom_getfloatarg(1, argc, argv); | ||
229 | if (start < 0) start = 0; | ||
230 | if (length <= 0) | ||
231 | x->x_limit = 0x7fffffff; | ||
232 | else | ||
233 | x->x_limit = start + length; | ||
234 | x->x_phase = start; | ||
235 | } | ||
236 | |||
237 | static void tabplay_tilde_stop(t_tabplay_tilde *x) | ||
238 | { | ||
239 | x->x_phase = 0x7fffffff; | ||
240 | } | ||
241 | |||
242 | static void tabplay_tilde_tick(t_tabplay_tilde *x) | ||
243 | { | ||
244 | outlet_bang(x->x_bangout); | ||
245 | } | ||
246 | |||
247 | static void tabplay_tilde_free(t_tabplay_tilde *x) | ||
248 | { | ||
249 | clock_free(x->x_clock); | ||
250 | } | ||
251 | |||
252 | void tabplay_tilde_setup(void) | ||
253 | { | ||
254 | tabplay_tilde_class = class_new(gensym("tabplay~"), | ||
255 | (t_newmethod)tabplay_tilde_new, (t_method)tabplay_tilde_free, | ||
256 | sizeof(t_tabplay_tilde), 0, A_DEFSYM, 0); | ||
257 | class_addmethod(tabplay_tilde_class, (t_method)tabplay_tilde_dsp, | ||
258 | gensym("dsp"), 0); | ||
259 | class_addmethod(tabplay_tilde_class, (t_method)tabplay_tilde_stop, | ||
260 | gensym("stop"), 0); | ||
261 | class_addmethod(tabplay_tilde_class, (t_method)tabplay_tilde_set, | ||
262 | gensym("set"), A_DEFSYM, 0); | ||
263 | class_addlist(tabplay_tilde_class, tabplay_tilde_list); | ||
264 | } | ||