Fix pdbox makefile to actually take part in dependency generation
[kugel-rb.git] / apps / plugins / pdbox / PDa / intern / samphold~.c
blob56944b41d827f589f49e251b51664913e179a07e
1 #include "../src/m_pd.h"
2 #include <../src/m_fixed.h>
4 typedef struct sigsamphold
6 t_object x_obj;
7 t_sample x_f;
8 t_sample x_lastin;
9 t_sample x_lastout;
10 } t_sigsamphold;
12 t_class *sigsamphold_class;
14 static void *sigsamphold_new(void)
16 t_sigsamphold *x = (t_sigsamphold *)pd_new(sigsamphold_class);
17 inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal);
18 outlet_new(&x->x_obj, gensym("signal"));
19 x->x_lastin = 0;
20 x->x_lastout = 0;
21 x->x_f = 0;
22 return (x);
25 static t_int *sigsamphold_perform(t_int *w)
27 t_sample *in1 = (t_sample *)(w[1]);
28 t_sample *in2 = (t_sample *)(w[2]);
29 t_sample *out = (t_sample *)(w[3]);
30 t_sigsamphold *x = (t_sigsamphold *)(w[4]);
31 int n = (t_int)(w[5]);
32 int i;
33 t_sample lastin = x->x_lastin;
34 t_sample lastout = x->x_lastout;
35 for (i = 0; i < n; i++, in1++)
37 t_sample next = *in2++;
38 if (next < lastin) lastout = *in1;
39 *out++ = lastout;
40 lastin = next;
42 x->x_lastin = lastin;
43 x->x_lastout = lastout;
44 return (w+6);
47 static void sigsamphold_dsp(t_sigsamphold *x, t_signal **sp)
49 dsp_add(sigsamphold_perform, 5,
50 sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec,
51 x, sp[0]->s_n);
54 static void sigsamphold_reset(t_sigsamphold *x)
56 x->x_lastin = 0x7fffffff;
59 static void sigsamphold_set(t_sigsamphold *x, t_float f)
61 x->x_lastout = f;
64 void samphold_tilde_setup(void)
66 sigsamphold_class = class_new(gensym("samphold~"),
67 (t_newmethod)sigsamphold_new, 0, sizeof(t_sigsamphold), 0, 0);
68 CLASS_MAINSIGNALIN(sigsamphold_class, t_sigsamphold, x_f);
69 class_addmethod(sigsamphold_class, (t_method)sigsamphold_set,
70 gensym("set"), A_FLOAT, 0);
71 class_addmethod(sigsamphold_class, (t_method)sigsamphold_reset,
72 gensym("reset"), 0);
73 class_addmethod(sigsamphold_class, (t_method)sigsamphold_dsp,
74 gensym("dsp"), 0);