89 #define nonzero(x) ((x > 0) ? x : 1.)
91 typedef struct _delta{
104 void *delta_new(
void);
105 void delta_bang(t_delta *x);
106 void delta_int(t_delta *x,
long n);
107 void delta_float(t_delta *x,
double f);
108 void delta_clear(t_delta *x);
109 void delta_set(t_delta *x, Symbol *s,
long ac, t_atom *setval);
110 void delta_assist(t_delta *x,
void *b,
long msg,
long arg,
char *dst);
120 int JAMOMA_EXPORT_MAXOBJ
main(
void)
124 common_symbols_init();
127 c = class_new(
"j.delta",(method)delta_new, (method)0L,
sizeof(t_delta), (method)0L, 0L, 0);
130 class_addmethod(c, (method)delta_bang,
"bang", A_CANT, 0);
131 class_addmethod(c, (method)delta_int,
"int", A_LONG, 0);
132 class_addmethod(c, (method)delta_float,
"float", A_FLOAT, 0);
133 class_addmethod(c, (method)delta_assist,
"assist", A_CANT, 0);
134 class_addmethod(c, (method)delta_set,
"set", A_GIMME, 0);
135 class_addmethod(c, (method)delta_clear,
"clear", 0);
136 class_addmethod(c, (method)object_obex_dumpout,
"dumpout", A_CANT, 0);
139 class_register(CLASS_BOX, c);
145 #pragma mark Object life
149 void *delta_new(
void)
155 object_obex_store((
void *)x, _sym_dumpout, (
object *)outlet_new(x,NULL));
156 x->outlets[2] = floatout(x);
157 x->outlets[1] = floatout(x);
158 x->outlets[0] = floatout(x);
173 void delta_bang(t_delta *x)
178 thistime = gettime();
179 velocity = (1000 * (x->delta) ) / (nonzero(thistime - x->lasttime));
180 x->lasttime = thistime;
182 outlet_float(x->outlets[2], velocity);
183 outlet_float(x->outlets[1], x->delta2);
184 outlet_float(x->outlets[0], x->delta);
189 void delta_int(t_delta *x,
long n)
199 void delta_float(t_delta *x,
double f)
210 x->delta = x->x0 - x->x1;
211 x->delta2 = x->x0 - 2*x->x1 + x->x2;
218 void delta_set(t_delta *x, t_symbol *s,
long argc, t_atom *argv)
223 f = atom_getfloat(argv);
232 x->lasttime = gettime();
234 x->delta = x->x0 - x->x1;
235 x->delta2 = x->x0 - 2*x->x1 + x->x2;
240 void delta_clear(t_delta *x)
245 x->lasttime = gettime();
250 void delta_assist(t_delta *x,
void *b,
long msg,
long arg,
char *dst)
257 strcpy(dst,
"(int/float) function value");
266 strcpy(dst,
"(float) 1st order difference");
269 strcpy(dst,
"(float) 2nd order difference");
272 strcpy(dst,
"(float) velocity");
275 strcpy(dst,
"dumpout");
int JAMOMA_EXPORT_MAXOBJ main(void)
Set up this class as a Max external the first time an object of this kind is instantiated.
t_class * this_class
Required. Global pointing to this class.