17 #include "TTClassWrapperMax.h"
20 #include "ext_strings.h"
21 #include "commonsyms.h"
28 typedef struct _zerox {
38 void* zerox_new(t_symbol *msg,
long argc, t_atom *argv);
39 void zerox_free(t_zerox *x);
40 void zerox_assist(t_zerox *x,
void *b,
long m,
long a,
char *s);
41 t_max_err attr_set_size(t_zerox *x,
void *attr,
long argc, t_atom *argv);
42 t_int* zerox_perform(t_int *w);
43 void zerox_dsp(t_zerox *x, t_signal **sp,
short *count);
44 void zerox_dsp64(t_zerox *x, t_object *dsp64,
short *count,
double samplerate,
long maxvectorsize,
long flags);
47 static t_class *s_zerox_class;
59 common_symbols_init();
61 c = class_new(
"j.zerox~", (method)zerox_new, (method)zerox_free,
sizeof(t_zerox), (method)0L, A_GIMME, 0);
63 class_addmethod(c, (method)zerox_dsp,
"dsp", A_CANT, 0L);
64 class_addmethod(c, (method)zerox_dsp64,
"dsp64", A_CANT, 0);
65 class_addmethod(c, (method)zerox_assist,
"assist", A_CANT, 0L);
67 attr = attr_offset_new(
"size", _sym_long, attrflags,
68 (method)0L, (method)attr_set_size, calcoffset(t_zerox, attr_size));
69 class_addattr(c, attr);
72 class_register(CLASS_BOX, c);
82 void *zerox_new(t_symbol *msg,
long argc, t_atom *argv)
84 t_zerox* x = (t_zerox*)object_alloc(s_zerox_class);
87 object_obex_store((
void *)x, _sym_dumpout, (
object *)outlet_new(x, NULL));
88 dsp_setup((t_pxobject *)x, 1);
89 outlet_new((t_pxobject *)x,
"signal");
90 outlet_new((t_pxobject *)x,
"signal");
97 attr_args_process(x, argc, argv);
103 void zerox_free(t_zerox *x)
105 dsp_free((t_pxobject *)x);
116 void zerox_assist(t_zerox *x,
void *b,
long msg,
long arg,
char *dst)
119 strcpy(dst,
"(signal) Input");
122 case 0: strcpy(dst,
"(signal) number of zero crossings");
break;
123 case 1: strcpy(dst,
"(signal) trigger");
break;
124 case 2: strcpy(dst,
"dumpout");
break;
131 t_max_err attr_set_size(t_zerox *x,
void *attr,
long argc, t_atom *argv)
133 x->attr_size = atom_getfloat(argv);
134 x->zeroxUnit->setAttributeValue(
TT(
"size"), (
TTUInt16)x->attr_size);
140 t_int *zerox_perform(t_int *w)
142 t_zerox *x = (t_zerox *)(w[1]);
143 t_float *in = (t_float *)(w[2]);
144 t_float *out1 = (t_float *)(w[3]);
145 t_float *out2 = (t_float *)(w[4]);
146 TTUInt16 vs = x->signalIn->getVectorSizeAsInt();
148 if (!x->obj.z_disabled) {
149 x->signalIn->setVector(0, vs, (t_float *)in);
150 x->zeroxUnit->process(x->signalIn, x->signalOut);
151 x->signalOut->getVector(0, vs, (t_float *)out1);
152 x->signalOut->getVector(1, vs, (t_float *)out2);
159 void zerox_dsp(t_zerox *x, t_signal **sp,
short *count)
161 x->zeroxUnit->sendMessage(
TT(
"clear"));
162 x->zeroxUnit->setAttributeValue(kTTSym_sampleRate, sp[0]->s_sr);
163 dsp_add(zerox_perform, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[0]->s_n);
165 x->signalIn->setAttributeValue(kTTSym_vectorSize, (
TTUInt16)sp[0]->s_n);
166 x->signalOut->setAttributeValue(kTTSym_vectorSize, (
int) sp[0]->s_n);
169 x->signalOut->sendMessage(
TT(
"alloc"));
173 void zerox_perform64(t_zerox *x, t_object *dsp64,
double **ins,
long numins,
double **outs,
long numouts,
long sampleframes,
long flags,
void *userparam)
175 TTUInt16 vs = x->signalIn->getVectorSizeAsInt();
177 x->signalIn->setVector(0, vs, ins[0]);
178 x->zeroxUnit->process(x->signalIn, x->signalOut);
179 x->signalOut->getVectorCopy(0, vs, outs[0]);
180 x->signalOut->getVectorCopy(1, vs, outs[1]);
183 void zerox_dsp64(t_zerox *x, t_object *dsp64,
short *count,
double samplerate,
long maxvectorsize,
long flags)
185 x->zeroxUnit->sendMessage(
TT(
"clear"));
186 x->zeroxUnit->setAttributeValue(kTTSym_sampleRate, samplerate);
188 x->signalIn->setAttributeValue(kTTSym_vectorSize, (
TTUInt16)maxvectorsize);
189 x->signalOut->setAttributeValue(kTTSym_vectorSize, (
TTUInt16)maxvectorsize);
191 x->signalOut->sendMessage(
TT(
"alloc"));
192 object_method(dsp64, gensym(
"dsp_add64"), x, zerox_perform64, 0, NULL);
std::uint16_t TTUInt16
16 bit unsigned integer
TTErr TTObjectBaseRelease(TTObjectBasePtr *anObject)
DEPRECATED.
TTAudioObjectBase is the base class for all audio generating and processing objects in Jamoma DSP...
#define TT
This macro is defined as a shortcut for doing a lookup in the symbol table.
TTErr TTObjectBaseInstantiate(const TTSymbol className, TTObjectBasePtr *returnedObjectPtr, const TTValue arguments)
DEPRECATED.
The TTAudioSignal class represents N vectors of audio samples for M channels.
void TTDSP_EXPORT TTDSPInit(const char *pathToBinaries=NULL)
Initialise the Jamoma DSP library, as well as Jamoma Foundation foundation if needed.
int C74_EXPORT main(void)
Set up this class as a Max external the first time an object of this kind is instantiated.