23 typedef struct _allpassmod {
47 void* allpassmod_new(t_symbol *s,
long argc, t_atom *argv);
48 void allpassmod_free(t_allpassmod *x);
49 void allpassmod_dsp64(t_allpassmod *x, t_object *dsp64,
short *count,
double samplerate,
long maxvectorsize,
long flags);
50 void allpassmod_assist(t_allpassmod *x,
void *b,
long m,
long a,
char *s);
51 void allpassmod_parameter_coefficient_callback(
const TTValue& baton,
const TTValue& v);
52 void allpassmod_parameter_delay_callback(
const TTValue& baton,
const TTValue& v);
53 void allpassmod_parameter_clear_callback(
const TTValue& baton,
const TTValue& v);
57 static t_class* s_allpassmod_class;
65 t_class *c = class_new(
"allpass1~.model", (method)allpassmod_new, (method)allpassmod_free,
sizeof(t_allpassmod), (method)0L, A_GIMME, 0);
69 class_addmethod(c, (method)allpassmod_dsp64,
"dsp64", A_CANT, 0);
70 class_addmethod(c, (method)object_obex_dumpout,
"dumpout", A_CANT,0);
71 class_addmethod(c, (method)allpassmod_assist,
"assist", A_CANT, 0L);
74 class_register(CLASS_BOX, c);
75 s_allpassmod_class = c;
84 void* allpassmod_new(t_symbol* s,
long argc, t_atom* argv)
86 t_allpassmod* x = (t_allpassmod*)object_alloc(s_allpassmod_class);
87 long attrstart = attr_args_offset(argc, argv);
92 object_obex_lookup(x, gensym(
"#P"), (t_object**)&context);
95 if (atom_getsym(argv)->s_name[0] ==
'/')
96 name += atom_getsym(argv)->s_name + 1;
98 name += atom_getsym(argv)->s_name;
107 x->signalOut =
TTObject(kTTSym_audiosignal, 2);
108 x->signalIn =
TTObject(kTTSym_audiosignal, 2);
114 x->model =
TTObject(kTTSym_Container, container_args);
115 x->model.set(kTTSym_tags, kTTSym_model);
117 TTValue registration_args(x->name, x->model, context);
118 JamomaApplication.
send(
"ObjectRegister", registration_args, none);
120 x->model.set(
"address", x->name);
125 x->message_clear =
TTObject(kTTSym_Data, kTTSym_message);
126 x->message_clear.set(kTTSym_baton,
TTPtr(x));
127 x->message_clear.set(kTTSym_function,
TTPtr(allpassmod_parameter_clear_callback));
128 x->message_clear.set(kTTSym_type, kTTSym_none);
129 x->message_clear.set(kTTSym_description,
TTSymbol(
"Clear the filter history"));
132 TTValue registration_args(address, x->message_clear, context);
133 JamomaApplication.
send(
"ObjectRegister", registration_args, none);
138 x->parameter_coefficient =
TTObject(kTTSym_Data, kTTSym_parameter);
139 x->parameter_coefficient.set(kTTSym_baton,
TTPtr(x));
140 x->parameter_coefficient.set(kTTSym_function,
TTPtr(allpassmod_parameter_coefficient_callback));
141 x->parameter_coefficient.set(kTTSym_type, kTTSym_decimal);
142 x->parameter_coefficient.set(kTTSym_valueDefault, 0.7);
143 x->parameter_coefficient.set(kTTSym_description,
TTSymbol(
"Gain coefficient"));
146 TTValue registration_args(address, x->parameter_coefficient, context);
147 JamomaApplication.
send(
"ObjectRegister", registration_args, none);
152 x->parameter_delay =
TTObject(kTTSym_Data, kTTSym_parameter);
153 x->parameter_delay.set(kTTSym_baton,
TTPtr(x));
154 x->parameter_delay.set(kTTSym_function,
TTPtr(allpassmod_parameter_delay_callback));
155 x->parameter_delay.set(kTTSym_type, kTTSym_decimal);
156 x->parameter_delay.set(kTTSym_valueDefault, 0.2);
157 x->parameter_delay.set(kTTSym_description,
TTSymbol(
"Delay time"));
160 TTValue registration_args(address, x->parameter_delay, context);
161 JamomaApplication.
send(
"ObjectRegister", registration_args, none);
168 x->in_left =
TTObject(
"Input.audio");
171 TTValue registration_args(address, x->in_left, context);
172 JamomaApplication.
send(
"ObjectRegister", registration_args, none);
177 x->in_right =
TTObject(
"Input.audio");
180 TTValue registration_args(address, x->in_right, context);
181 JamomaApplication.
send(
"ObjectRegister", registration_args, none);
189 x->out_left =
TTObject(
"Output.audio");
192 TTValue registration_args(address, x->out_left, context);
193 JamomaApplication.
send(
"ObjectRegister", registration_args, none);
198 x->out_right =
TTObject(
"Output.audio");
201 TTValue registration_args(address, x->out_right, context);
202 JamomaApplication.
send(
"ObjectRegister", registration_args, none);
208 x->preset =
TTObject(kTTSym_PresetManager);
209 x->preset.set(
"address", x->name);
212 TTValue registration_args(address, x->preset, context);
213 JamomaApplication.
send(
"ObjectRegister", registration_args, none);
221 xmlHandler.set(
"object", x->preset);
225 xmlHandler.send(
"Read", path, out);
228 x->preset.send(
"Recall", 1, none);
233 x->model.send(
"Init");
236 dsp_setup((t_pxobject*)x, 2);
237 x->obj.z_misc = Z_NO_INPLACE;
238 for (
int i=0; i < 2; i++)
239 outlet_new((t_pxobject*)x,
"signal");
241 attr_args_process(x, argc, argv);
246 void allpassmod_free(t_allpassmod *x)
248 dsp_free((t_pxobject *)x);
254 JamomaApplication.
send(
"ObjectUnregister", address, none);
257 JamomaApplication.
send(
"ObjectUnregister", address, none);
260 JamomaApplication.
send(
"ObjectUnregister", address, none);
263 JamomaApplication.
send(
"ObjectUnregister", address, none);
266 JamomaApplication.
send(
"ObjectUnregister", address, none);
269 JamomaApplication.
send(
"ObjectUnregister", address, none);
272 JamomaApplication.
send(
"ObjectUnregister", address, none);
275 JamomaApplication.
send(
"ObjectUnregister", address, none);
278 JamomaApplication.
send(
"ObjectUnregister", address, none);
284 void allpassmod_assist(t_allpassmod *x,
void *b,
long msg,
long arg,
char *dst)
290 void allpassmod_parameter_coefficient_callback(
const TTValue& baton,
const TTValue& v)
292 t_allpassmod *x = (t_allpassmod*)
TTPtr(baton[0]);
293 x->allpass.set(
"linearGain", v);
298 void allpassmod_parameter_delay_callback(
const TTValue& baton,
const TTValue& v)
300 t_allpassmod *x = (t_allpassmod*)
TTPtr(baton[0]);
301 x->allpass.set(
"delay", v);
305 void allpassmod_parameter_clear_callback(
const TTValue& baton,
const TTValue& v)
307 t_allpassmod *x = (t_allpassmod*)
TTPtr(baton[0]);
308 x->allpass.send(
"clear");
312 void allpassmod_perform64(t_allpassmod *x, t_object *dsp64,
double **ins,
long numins,
double **outs,
long numouts,
long sampleframes,
long flags,
void *userparam)
323 in_left_instance->
process(ins[0], NULL, sampleframes);
324 in_right_instance->process(ins[1], NULL, sampleframes);
327 signalIn_instance->setVector(0, sampleframes, in_left_instance->
getVector());
328 signalIn_instance->setVector(1, sampleframes, in_right_instance->getVector());
331 allpass_instance->process(signalIn_instance, signalOut_instance);
334 signalOut_instance->getVectorCopy(0, sampleframes, ins[0]);
335 signalOut_instance->getVectorCopy(1, sampleframes, ins[1]);
337 out_left_instance->process(ins[0], outs[0], sampleframes);
338 out_right_instance->process(ins[1], outs[1], sampleframes);
342 void allpassmod_dsp64(t_allpassmod *x, t_object *dsp64,
short *count,
double samplerate,
long maxvectorsize,
long flags)
353 signalIn_instance->setNumChannels(2);
354 signalOut_instance->setNumChannels(2);
356 signalIn_instance->setVectorSizeWithInt((
TTUInt16)maxvectorsize);
357 signalOut_instance->setVectorSizeWithInt((
TTUInt16)maxvectorsize);
359 signalOut_instance->alloc();
362 object_method(dsp64, gensym(
"dsp_add64"), x, allpassmod_perform64, 0, NULL);
365 in_right_instance->setupAudioSignals(maxvectorsize);
366 out_left_instance->setupAudioSignals(maxvectorsize, samplerate);
367 out_right_instance->setupAudioSignals(maxvectorsize, samplerate);
TTAddress appendAddress(const TTAddress &toAppend)
Return a new TTAddress with the appended part.
std::uint16_t TTUInt16
16 bit unsigned integer
TTErr send(const TTSymbol aName)
Send a message to this object with no arguments.
TTAudioObjectBase is the base class for all audio generating and processing objects in Jamoma DSP...
The TTAddress class is used to represent a string and efficiently pass and compare that string...
Create and use Jamoma object instances.
Wrap audio objects for convenience.
TTErr setAttributeValue(const TTSymbol name, TTValue &value)
Set an attribute value for an object.
void * TTPtr
A generic pointer.
TTAudioObjectBase * TTAudioObjectBasePtr
Pointer to a TTAudioObjectBase.
The TTSymbol class is used to represent a string and efficiently pass and compare that string...
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.
Wraps Jamoma Core classes as objects for Max/MSP.
The TTString class is used to represent a string.
An audio output component for Jamoma models.
[doxygenAppendixC_copyExample]