58 void receive_loadbang(
TTPtr self);
60 void receive_return_model_address(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv);
62 #ifdef JCOM_RECEIVE_TILDE
65 t_int* receive_perform(t_int *w);
68 void receive_dsp(
TTPtr self, t_signal **sp,
short *count);
71 void receive_perform64(
TTPtr self, t_object *dsp64,
double **ins,
long numins,
double **outs,
long numouts,
long sampleframes,
long flags,
void *userparam);
74 void receive_dsp64(
TTPtr self, t_object *dsp64,
short *count,
double samplerate,
long maxvectorsize,
long flags);
78 void receive_return_address(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv);
79 void receive_return_value(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv);
98 extern "C" void JAMOMA_EXPORT_MAXOBJ setup_j0x2ereceive(
void)
100 ModularSpec *spec =
new ModularSpec;
106 #ifdef JCOM_RECEIVE_TILDE
116 eclass_addmethod(c->pdClass, (method)
receive_assist,
"assist", A_CANT, 0L);
118 eclass_addmethod(c->pdClass, (method)receive_return_model_address,
"return_model_address", A_CANT, 0);
120 #ifdef JCOM_RECEIVE_TILDE
121 eclass_addmethod(c->pdClass, (method)receive_dsp,
"dsp", A_GIMME, 0);
122 eclass_addmethod(c->pdClass, (method)receive_dsp64,
"dsp64", A_CANT, 0);
124 eclass_addmethod(c->pdClass, (method)receive_return_address,
"return_address", A_CANT, 0);
125 eclass_addmethod(c->pdClass, (method)receive_return_value,
"return_value", A_CANT, 0);
127 eclass_addmethod(c->pdClass, (method)
receive_bang,
"bang", A_NULL, 0);
130 eclass_addmethod(c->pdClass, (method)
receive_address,
"address", A_SYM, 0);
131 eclass_addmethod(c->pdClass, (method)receive_loadbang,
"loadbang", A_NULL, 0);
135 #pragma mark Object life
141 long attrstart = attr_args_offset(argc, argv);
144 if (attrstart && argv)
145 address = atom_getsym(argv);
147 address = _sym_nothing;
159 x->
outlets = (TTHandle)sysmem_newptr(
sizeof(
TTPtr) * 2);
161 #ifdef JCOM_RECEIVE_TILDE
164 dsp_setup((t_pxobject *)x, 1);
165 x->
obj.z_misc = Z_NO_INPLACE | Z_PUT_FIRST;
167 x->
outlets[data_out] = outlet_new((t_pxobject *)x,
"signal");
168 x->
outlets[address_out] = outlet_new(x, NULL);
172 x->
outlets[data_out] = outlet_new((t_object*)x, NULL);
173 x->
outlets[address_out] = outlet_new((t_object*)x, NULL);
176 attr_args_process(x, argc, argv);
192 #ifdef JCOM_RECEIVE_TILDE
195 dsp_free((t_pxobject *)x);
200 #pragma mark NodeLib association
208 TTAddress absoluteAddress, returnedAddress;
213 if (x->
address == kTTAdrsEmpty)
224 contextAddress = v[0];
235 object_obex_dumpout((t_object*)x, gensym(
"address"), 1, a);
244 makeInternals_receiver(x, contextAddress,
TTSymbol(
"/model:address"), gensym(
"return_model_address"), anObject, x->
patcherContext == kTTSym_view);
257 contextAddress = kTTAdrsRoot;
261 atom_setsym(a, gensym((
char*)absoluteAddress.
c_str()));
262 object_obex_dumpout((t_object*)x, gensym(
"address"), 1, a);
277 if (x->
index > 100) {
278 pd_error((t_object*)x,
"tries to bind too many times on %s", x->
address.
c_str());
279 object_obex_dumpout((t_object*)x, gensym(
"error"), 0, NULL);
290 void receive_return_model_address(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv)
303 atom_setsym(a, gensym((
char*)absoluteAddress.
c_str()));
304 object_obex_dumpout((t_object*)x, gensym(
"address"), 1, a);
310 #ifndef JCOM_RECEIVE_TILDE
311 void receive_return_address(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv)
315 outlet_anything((t_outlet*)x->
outlets[address_out], msg, argc, argv);
318 void receive_return_value(
TTPtr self, t_symbol *msg,
long argc, t_atom *argv)
324 if (msg == _sym_nothing)
325 outlet_anything((t_outlet*)x->
outlets[data_out], _sym_nothing, argc, argv);
327 outlet_anything((t_outlet*)x->
outlets[data_out], msg, argc, argv);
332 #pragma mark Methods bound to input/inlets
342 strcpy(dst,
"address output");
345 strcpy(dst,
"data output");
348 strcpy(dst,
"dumpout");
354 #ifndef JCOM_RECEIVE_TILDE
362 object_obex_dumpout(
self, _sym_error, 0, NULL);
368 void receive_loadbang(
TTPtr self)
377 if(x->dumpOut) outlet_anything((t_outlet*)x->dumpOut, gensym(
"address"), 1, &a);
378 else error(
"can't output anything ??? WTF ?");
404 aReceiver.
set(kTTSym_address, kTTAdrsEmpty);
424 object_obex_dumpout((t_object*)x, gensym(
"address"), 1, a);
435 #pragma mark Methods relating to audio processing
437 #ifdef JCOM_RECEIVE_TILDE
440 t_int *receive_perform(t_int *w)
444 TTListPtr objectCache = NULL;
454 if (x->
obj.z_disabled || !active)
460 aReceiver->
mSignal.
get(kTTSym_vectorSize, vectorSize);
466 if (!x->wrappedObject.get(kTTSym_objectCache, v)) {
468 objectCache = TTListPtr((
TTPtr)v[0]);
473 for (objectCache->begin(); objectCache->end(); objectCache->next()) {
475 anObject = objectCache->current()[0];
477 if (anObject.
valid()) {
480 if (anObject.
name() == kTTSym_OutputAudio) {
483 TTOutputPtr(anObject.
instance())->mSignalOut.
get(kTTSym_vectorSize, vectorSize);
490 else if (anObject.
name() == kTTSym_InputAudio) {
493 TTInputPtr(anObject.
instance())->mSignalOut.
get(kTTSym_vectorSize, vectorSize);
500 else if (anObject.
name() == kTTSym_Data) {
503 anObject.
get(kTTSym_value, v);
525 void receive_perform64(
TTPtr self, t_object *dsp64,
double **ins,
long numins,
double **outs,
long numouts,
long sampleframes,
long flags,
void *userparam)
529 TTListPtr objectCache = NULL;
539 if (x->
obj.z_disabled || !active) {
544 aReceiver->
mSignal.
get(kTTSym_vectorSize, vectorSize);
556 aReceiver->
mSignal.
get(kTTSym_vectorSize, vectorSize);
564 objectCache = TTListPtr((
TTPtr)v[0]);
569 for (objectCache->begin(); objectCache->end(); objectCache->next()) {
571 anObject = objectCache->current()[0];
573 if (anObject.
valid()) {
576 if (anObject.
name() == kTTSym_OutputAudio) {
579 TTOutputPtr(anObject.
instance())->mSignalOut.
get(kTTSym_vectorSize, vectorSize);
586 else if (anObject.
name() == kTTSym_InputAudio) {
589 TTInputPtr(anObject.
instance())->mSignalOut.
get(kTTSym_vectorSize, vectorSize);
596 else if (anObject.
name() == kTTSym_Data) {
599 anObject.
get(kTTSym_value, v);
617 void receive_dsp(
TTPtr self, t_signal **sp,
short *count)
621 void** audioVectors = NULL;
626 audioVectors = (
void**)sysmem_newptr(
sizeof(
void*) * 3);
629 if (count[0] || count[1]) {
630 if (sp[0]->s_n > vectorSize)
631 vectorSize = sp[0]->s_n;
633 audioVectors[1] = sp[0]->s_vec;
634 audioVectors[2] = sp[1]->s_vec;
638 aReceiver->
mSignal.
set(kTTSym_numChannels, 1);
639 aReceiver->
mSignal.
set(kTTSym_vectorSize, vectorSize);
644 dsp_addv(receive_perform, 3, audioVectors);
645 sysmem_freeptr(audioVectors);
650 void receive_dsp64(
TTPtr self, t_object *dsp64,
short *count,
double samplerate,
long maxvectorsize,
long flags)
658 aReceiver->
mSignal.
set(kTTSym_numChannels, 1);
664 object_method(dsp64, gensym(
"dsp_add64"), x, receive_perform64, 0, NULL);
668 #endif // JCOM_RECEIVE_TILDE
TTAddress appendAddress(const TTAddress &toAppend)
Return a new TTAddress with the appended part.
void WrappedReceiverClass_new(TTPtr self, long argc, t_atom *argv)
Wrapper for the j.receive constructor class, called when an instance is created.
TTObject subscriberObject
The instance of a TTSubscriber object used to register the wrapped object in the tree structure...
bool TTBoolean
Boolean flag, same as Boolean on the Mac.
std::uint16_t TTUInt16
16 bit unsigned integer
TTErr send(const TTSymbol aName)
Send a message to this object with no arguments.
void receive_assist(TTPtr self, void *b, long msg, long arg, char *dst)
Assistance Method.
TTAddress appendAttribute(TTSymbol anAttribute)
Return a new TTAddress with attribute part.
TTHandle outlets
an array of outlet
TTErr lookup(const TTSymbol key, TTValue &value)
Find the value for the given key.
We build a directory of TTNodes, and you can request a pointer for any TTNode, or add an observer to ...
TTAddress address
sometime external needs to store an address (e.g. send, receive, view, ...)
void receive_bang(TTPtr self)
bang handler for j.receive
TTSymbol patcherClass
the patcher class in which the external is
The TTAddress class is used to represent a string and efficiently pass and compare that string...
Create and use Jamoma object instances.
TTErr getAttributeValue(const TTSymbol name, TTValue &value)
Get an attribute value for an object.
t_object * patcherPtr
the patcher in which the external is (ignoring subpatcher)
this flag means that an address have no leading slash
TTHashPtr internals
An hash table to store any internal TTObjectBases (like TTData, TTViewer, ...)
void * TTPtr
A generic pointer.
TTErr get(const TTSymbol aName, T &aReturnedValue) const
Get an attribute value for an object.
TTSymbol name() const
Return the name of this class.
t_object obj
Max control object header.
TTErr set(const TTSymbol aName, T aValue)
Set an attribute value for an object.
The TTSymbol class is used to represent a string and efficiently pass and compare that string...
float TTFloat32
32 bit floating point number
void receive_address(TTPtr self, t_symbol *address)
address message handler for j.receive.
TTObject wrappedObject
The instance of the Jamoma object we are wrapping.
The TTAudioSignal class represents N vectors of audio samples for M channels.
TTSymbol & getAttribute()
Get the attribute part.
this flag means that an address have a leading slash
const char * c_str() const
Return a pointer to the internal string as a C-string.
void WrappedReceiverClass_free(TTPtr self)
Wrapper for the j.receive deconstructor class, called when an instance is destroyed.
Wraps Jamoma Core classes as objects for PureData.
Data Structure for this object.
TTAddressType getType()
Get the type.
TTErr remove(const TTSymbol key)
Remove an item from the hash table.
TTErr
Jamoma Error Codes Enumeration of error codes that might be returned by any of the TTBlue functions a...
void receive_subscribe(TTPtr self)
Associate j.receive(~) with NodeLib.
TTErr get(const TTSymbol aName, T &aReturnedValue)
Get an attribute value for an object This is the same as calling getAttributeValue().
TTSymbol patcherContext
the patcher context in which the external is (model, view)
TTSymbol patcherName
the patcher name in which the external is
TTObjectBase * instance() const
Return a direct pointer to the internal instance.
long index
index of the inlet used
TTObject mSignal
any data structure to receive complex signal
TTBoolean valid() const
Determine if the object contained by this TTObject is truly ready for use.
TTSymbol & getName()
Get the name part.
WrappedModularInstance * WrappedModularInstancePtr
Pointer to a wrapped instance of our object.
[doxygenAppendixC_copyExample]
void WrapTTReceiverClass(WrappedClassPtr c)
Wrap the j.receive class as a Pd object.
TTErr wrapTTModularClassAsPdClass(TTSymbol &ttblueClassName, const char *pdClassName, WrappedClassPtr *c, ModularSpec *specificities)
Wrap a Jamoma class as a Pd class.