// Create void *out_new(t_symbol *s, long argc, t_atom *argv) { long attrstart = attr_args_offset(argc, argv); // support normal arguments t_out *x = (t_out *)object_alloc(out_class); short i; if(x){ x->dumpout = outlet_new(x, NULL); object_obex_store((void *)x, jps_dumpout, (object *)x->dumpout); // setup the dumpout x->numOutputs = 1; x->attr_preview = 0; x->preview_object = NULL; x->attr_bypass = 0; x->attr_mute = 0; x->attr_mix = 100; // Assume 100%, so that processed signal is passed through if @has_mix is false if(attrstart > 0){ int argument = atom_getlong(argv); x->numOutputs = TTClip(argument, 1, MAX_NUM_CHANNELS); } #ifdef JCOM_OUT_TILDE if(x->numOutputs > 0) dsp_setup((t_pxobject *)x, x->numOutputs); // Create Object and Inlets else dsp_setup((t_pxobject *)x, 1); // Create Object and Inlets x->common.ob.z_misc = Z_NO_INPLACE | Z_PUT_LAST; // Z_PUT_LAST so that thispoly~ gets it's message properly? for(i=0; i < (x->numOutputs); i++) outlet_new((t_pxobject *)x, "signal"); // Create a signal Outlet x->clock = clock_new(x, (method)update_meters); x->clock_is_set = 0; TTObjectInstantiate(kTTSym_audiosignal, &x->audioIn, x->numOutputs); TTObjectInstantiate(kTTSym_audiosignal, &x->audioOut, x->numOutputs); TTObjectInstantiate(kTTSym_audiosignal, &x->audioTemp, x->numOutputs); TTObjectInstantiate(kTTSym_audiosignal, &x->zeroSignal, x->numOutputs); TTObjectInstantiate(TT("crossfade"), &x->xfade, x->numOutputs); x->xfade->setAttributeValue(TT("position"), 1.0); TTObjectInstantiate(TT("gain"), &x->gain, x->numOutputs); TTObjectInstantiate(TT("ramp"), &x->ramp_gain, x->numOutputs); TTObjectInstantiate(TT("ramp"), &x->ramp_xfade, x->numOutputs); // out_alloc(x, sys_getblksize()); // allocates the vectors for the audio signals x->gain->setAttributeValue(TT("linearGain"), 1.0); #else for(i=x->numOutputs-1; i >= 1; i--) x->inlet[i] = proxy_new(x, i, 0L); for(i=x->numOutputs-1; i >= 0; i--) x->outlet[i] = outlet_new(x, 0L); #endif jcom_core_subscriber_new_common(&x->common, jps__jcom_out__, jps_subscribe_out); jcom_core_subscriber_setcustomsubscribe_method(&x->common, &out_subscribe); attr_args_process(x, argc, argv); // handle attribute args jcom_core_subscriber_subscribe((t_jcom_core_subscriber_common*)x); } return (x); // Return the pointer }
t_max_err jcom_core_attr_setname(t_jcom_core_subscriber_extended *x, void *attr, long argc, t_atom *argv) { if (argc && argv) { jcom_core_unsubscribe(x->hub, x); x->hub = NULL; x->attr_name = atom_getsym(argv); jcom_core_subscriber_subscribe((t_jcom_core_subscriber_common*)x); } return MAX_ERR_NONE; }
// COMMON ATTRIBUTE: name t_max_err jcom_core_subscriber_attribute_common_setname(t_jcom_core_subscriber_common *x, void *attr, long argc, t_atom *argv) { t_symbol *arg = atom_getsym(argv); x->attr_name = arg; if (arg->s_name[strlen(arg->s_name)-1] == '*') x->has_wildcard = true; else x->has_wildcard = false; // if (x->subscriber_type == jps_subscribe_return && x->hub) { if (x->hub) { jcom_core_unsubscribe(x->hub, x); x->hub = NULL; // x->attr_name = atom_getsym(argv); jcom_core_subscriber_subscribe((t_jcom_core_subscriber_common*)x); } // if the client understands 'update_name' then we call it object_method(x, SymbolGen("update_name")); return MAX_ERR_NONE; }
void *return_new(t_symbol *s, long argc, t_atom *argv) { long attrstart = attr_args_offset(argc, argv); t_return* x = (t_return *)object_alloc(return_class); t_symbol* name = _sym_nothing; ObjectPtr patcher = NULL; if (attrstart && argv) atom_arg_getsym(&name, 0, attrstart, argv); else name = symbol_unique(); // for instances buried inside of another object: // we pass a second argument which is a pointer to the patcher if (attrstart>1 && argv) patcher = ObjectPtr(atom_getobj(argv+1)); if (x) { x->outlets[k_outlet_dumpout] = outlet_new(x, 0L); object_obex_store((void *)x, _sym_dumpout, (t_object *)x->outlets[k_outlet_dumpout]); x->outlets[k_outlet_thru] = outlet_new(x, 0L); jcom_core_subscriber_new_extended(&x->common, name, jps_subscribe_return); atom_setsym(&x->output[0], name); x->output_len = 1; x->attrEnable = true; x->attrDataspace = jps_none; x->attrUnitNative = jps_none; if (patcher) x->common.container = patcher; attr_args_process(x, argc, argv); jcom_core_subscriber_subscribe((t_jcom_core_subscriber_common*)x); return_makesend(x); } return (x); }