From 79096fd626b946efd6947fa94ab15d30bf003ba0 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Thu, 19 Aug 2010 05:04:28 +0000 Subject: converted to new library template and debianized svn path=/trunk/externals/ekext/; revision=13835 --- doubledelta.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 doubledelta.c (limited to 'doubledelta.c') diff --git a/doubledelta.c b/doubledelta.c new file mode 100644 index 0000000..d21341c --- /dev/null +++ b/doubledelta.c @@ -0,0 +1,48 @@ +#include "m_pd.h" + +t_class *doubledelta_class; + +typedef struct _doubledelta +{ + t_object x_obj; + t_float f_now, f_prev, f_delta, f_delta_prev, f_doubledelta, fa; + t_outlet *delta, *doubledelta; +} t_doubledelta; + +void doubledelta_float(t_doubledelta *y, t_floatarg f) +{ + y->f_delta_prev = y->f_delta; + y->f_prev = y->f_now; + y->f_now = f; + y->f_delta = y->f_now - y->f_prev; + y->f_doubledelta = y->f_delta - y->f_delta_prev; + outlet_float(y->doubledelta, y->f_doubledelta); + outlet_float(y->delta, y->f_delta); +} + +void doubledelta_bang(t_doubledelta *y) +{ + outlet_float(y->doubledelta, y->f_doubledelta); + outlet_float(y->delta, y->f_delta); +} + +void *doubledelta_new(t_floatarg f) +{ + t_doubledelta *y = (t_doubledelta *)pd_new(doubledelta_class); + y->fa = f; + y->delta = outlet_new(&y->x_obj, gensym("float")); + y->doubledelta = outlet_new(&y->x_obj, gensym("float")); + return(void *)y; +} + +void doubledelta_setup(void) +{ + doubledelta_class = class_new(gensym("doubledelta"), + (t_newmethod)doubledelta_new, + 0, sizeof(t_doubledelta), + 0, A_DEFFLOAT, 0); + post("delta & delta-delta values, "); + + class_addbang(doubledelta_class, doubledelta_bang); + class_addfloat(doubledelta_class, doubledelta_float); +} -- cgit v1.2.1