Add FS #10214. Initial commit of the original PDa code for the GSoC Pure Data plugin...
[kugel-rb.git] / apps / plugins / pdbox / PDa / intern / clip~.c
blobe2c697d1d8a5b915631ec03764cfd536fb246c27
1 #include <m_pd.h>
2 #include <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);
59 #include <m_pd.h>
60 #include <m_fixed.h>
62 static t_class *clip_class;
64 typedef struct _clip
66 t_object x_obj;
67 float x_f;
68 t_float x_lo;
69 t_float x_hi;
70 } t_clip;
72 static void *clip_new(t_floatarg lo, t_floatarg hi)
74 t_clip *x = (t_clip *)pd_new(clip_class);
75 x->x_lo = lo;
76 x->x_hi = hi;
77 outlet_new(&x->x_obj, gensym("signal"));
78 floatinlet_new(&x->x_obj, &x->x_lo);
79 floatinlet_new(&x->x_obj, &x->x_hi);
80 x->x_f = 0;
81 return (x);
84 static t_int *clip_perform(t_int *w)
86 t_clip *x = (t_clip *)(w[1]);
87 t_sample *in = (t_sample *)(w[2]);
88 t_sample *out = (t_sample *)(w[3]);
89 int n = (int)(w[4]);
90 t_sample lo;
91 t_sample hi;
92 lo = ftofix(x->x_lo);
93 hi = ftofix(x->x_hi);
95 while (n--)
97 t_sample f = *in++;
98 if (f < lo) f = lo;
99 if (f > hi) f = hi;
100 *out++ = f;
102 return (w+5);
105 static void clip_dsp(t_clip *x, t_signal **sp)
107 dsp_add(clip_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n);
110 void clip_tilde_setup(void)
112 clip_class = class_new(gensym("clip~"), (t_newmethod)clip_new, 0,
113 sizeof(t_clip), 0, A_DEFFLOAT, A_DEFFLOAT, 0);
114 CLASS_MAINSIGNALIN(clip_class, t_clip, x_f);
115 class_addmethod(clip_class, (t_method)clip_dsp, gensym("dsp"), 0);