Fix pdbox makefile to actually take part in dependency generation
[kugel-rb.git] / apps / plugins / pdbox / PDa / intern / clip~.c
blobd00a50f326bac977955331393cd50220c383d72c
1 #include "../src/m_pd.h"
2 #include <../src/m_fixed.h>
4 static t_class *clip_class;
6 typedef struct _clip
8 t_object x_obj;
9 float x_f;
10 t_float x_lo;
11 t_float x_hi;
12 } t_clip;
14 static void *clip_new(t_floatarg lo, t_floatarg hi)
16 t_clip *x = (t_clip *)pd_new(clip_class);
17 x->x_lo = lo;
18 x->x_hi = hi;
19 outlet_new(&x->x_obj, gensym("signal"));
20 floatinlet_new(&x->x_obj, &x->x_lo);
21 floatinlet_new(&x->x_obj, &x->x_hi);
22 x->x_f = 0;
23 return (x);
26 static t_int *clip_perform(t_int *w)
28 t_clip *x = (t_clip *)(w[1]);
29 t_sample *in = (t_sample *)(w[2]);
30 t_sample *out = (t_sample *)(w[3]);
31 int n = (int)(w[4]);
32 t_sample lo;
33 t_sample hi;
34 lo = ftofix(x->x_lo);
35 hi = ftofix(x->x_hi);
37 while (n--)
39 t_sample f = *in++;
40 if (f < lo) f = lo;
41 if (f > hi) f = hi;
42 *out++ = f;
44 return (w+5);
47 static void clip_dsp(t_clip *x, t_signal **sp)
49 dsp_add(clip_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n);
52 void clip_tilde_setup(void)
54 clip_class = class_new(gensym("clip~"), (t_newmethod)clip_new, 0,
55 sizeof(t_clip), 0, A_DEFFLOAT, A_DEFFLOAT, 0);
56 CLASS_MAINSIGNALIN(clip_class, t_clip, x_f);
57 class_addmethod(clip_class, (t_method)clip_dsp, gensym("dsp"), 0);