t_max_err hoa_meter_attr_set_loudspeakers(t_hoa_meter *x, t_object *attr, long ac, t_atom *av) { long d; t_object *b = NULL; if (ac && av) { if(atom_gettype(av) == A_LONG) { d = Hoa3D::clip_min(long(atom_getlong(av)), long(1)); if (d != x->f_number_of_loudspeakers) { int dspState = sys_getdspobjdspstate((t_object*)x); if(dspState) object_method(gensym("dsp")->s_thing, gensym("stop")); delete x->f_meter; delete [] x->f_signals; x->f_meter = new Hoa3D::Meter(x->f_number_of_loudspeakers, 100, 199); x->f_number_of_loudspeakers = x->f_meter->getNumberOfLoudspeakers(); x->f_signals = new double[x->f_meter->getNumberOfLoudspeakers() * SYS_MAXBLKSIZE]; object_obex_lookup(x, gensym("#B"), (t_object **)&b); object_method(b, gensym("dynlet_begin")); dsp_resize((t_pxobject*)x, x->f_meter->getNumberOfLoudspeakers()); object_method(b, gensym("dynlet_end")); if(dspState) object_method(gensym("dsp")->s_thing, gensym("start")); } } } return MAX_ERR_NONE; }
t_max_err channels_set(t_hoa_vector *x, t_object *attr, long argc, t_atom *argv) { t_object *b = NULL; if(argc && argv && atom_gettype(argv) == A_LONG) { int number_of_loudspeakers = atom_getlong(argv); if(number_of_loudspeakers != x->f_vector->getNumberOfChannels() && number_of_loudspeakers > 0 && number_of_loudspeakers <= MAX_CHANNELS) { object_method(gensym("dsp")->s_thing, hoa_sym_stop); delete x->f_vector; x->f_vector = new Hoa2D::Vector(number_of_loudspeakers); object_obex_lookup(x, gensym("#B"), (t_object **)&b); object_method(b, hoa_sym_dynlet_begin); dsp_resize((t_pxobject*)x, x->f_vector->getNumberOfChannels()); object_method(b, hoa_sym_dynlet_end); object_attr_setvalueof(x, hoa_sym_angles, 0, NULL); } } return MAX_ERR_NONE; }
t_max_err set_order(t_hoa_scope *x, t_object *attr, long ac, t_atom *av) { long order; t_object *b = NULL; if (ac && av && atom_gettype(av) == A_LONG) { order = atom_getlong(av); if(order != x->f_scope->getOrder() && order > 0) { int dspState = sys_getdspobjdspstate((t_object*)x); if(dspState) object_method(gensym("dsp")->s_thing, hoa_sym_start); delete x->f_scope; delete [] x->f_signals; x->f_scope = new Hoa2D::Scope(order, NUMBEROFCIRCLEPOINTS_UI); x->f_order = x->f_scope->getOrder(); x->f_signals = new double[x->f_scope->getNumberOfHarmonics() * SYS_MAXBLKSIZE]; object_obex_lookup(x, gensym("#B"), (t_object **)&b); object_method(b, hoa_sym_dynlet_begin); dsp_resize((t_pxobject*)x, x->f_scope->getNumberOfHarmonics()); object_method(b, hoa_sym_dynlet_end); if(dspState) object_method(gensym("dsp")->s_thing, hoa_sym_stop); } } return MAX_ERR_NONE; }
t_max_err set_order(t_hoa_3d_scope *x, t_object *attr, long ac, t_atom *av) { long order; t_object *b = NULL; if (ac && av && atom_gettype(av) == A_LONG) { order = atom_getlong(av); if(order != x->f_scope->getDecompositionOrder() && order > 0) { object_method(hoa_sym_dsp->s_thing, hoa_sym_stop); delete x->f_scope; delete [] x->f_signals; x->f_scope = new Scope<Hoa3d, t_sample>(order, (ulong)(HOA_DISPLAY_NPOINTS * 0.25), (ulong)(HOA_DISPLAY_NPOINTS * 0.5)); x->f_order = x->f_scope->getDecompositionOrder(); x->f_signals = new double[x->f_scope->getNumberOfHarmonics() * SYS_MAXBLKSIZE]; object_obex_lookup(x, hoa_sym_pound_B, (t_object **)&b); object_method(b, hoa_sym_dynlet_begin); dsp_resize((t_pxobject*)x, x->f_scope->getNumberOfHarmonics()); object_method(b, hoa_sym_dynlet_end); jbox_invalidate_layer((t_object *)x, NULL, hoa_sym_background_layer); jbox_redraw((t_jbox *)x); } } return MAX_ERR_NONE; }
void scope_resize_inputs(t_scope *x, long newNumberOfInput) { newNumberOfInput = Tools::clip_min(newNumberOfInput, long(1)); t_object *b = NULL; object_obex_lookup(x, _sym_pound_B, (t_object **)&b); object_method(b, gensym("dynlet_begin")); dsp_resize((t_pxobject*)x, newNumberOfInput); object_method(b, gensym("dynlet_end")); }
t_max_err channels_set(t_meter *x, t_object *attr, long argc, t_atom *argv) { if(argc && argv && atom_isNumber(argv)) { t_object *b = NULL; int numberOfPlanewaves = atom_getlong(argv); if(numberOfPlanewaves != x->f_meter->getNumberOfPlanewaves() && numberOfPlanewaves > 0 && numberOfPlanewaves <= MAX_UI_CHANNELS) { object_method(hoa_sym_dsp->s_thing, hoa_sym_stop); if (x->f_meter) delete x->f_meter; if (x->f_vector) delete x->f_vector; x->f_meter = new Meter<Hoa2d, t_sample>(numberOfPlanewaves); x->f_vector = new Vector<Hoa2d, t_sample>(numberOfPlanewaves); x->f_meter->computeRendering(); x->f_vector->computeRendering(); object_obex_lookup(x, hoa_sym_pound_B, (t_object **)&b); object_method(b, hoa_sym_dynlet_begin); dsp_resize((t_pxobject*)x, x->f_meter->getNumberOfPlanewaves()); object_method(b, hoa_sym_dynlet_end); if (x->f_meter->getNumberOfPlanewaves() == 1) { object_attr_setdisabled((t_object*)x, hoa_sym_angles, 1); object_attr_setdisabled((t_object*)x, gensym("offset"), 1); object_attr_setdisabled((t_object*)x, gensym("rotation"), 1); } else { object_attr_setdisabled((t_object*)x, hoa_sym_angles, 0); object_attr_setdisabled((t_object*)x, gensym("offset"), 0); object_attr_setdisabled((t_object*)x, gensym("rotation"), 0); } } object_attr_setvalueof(x, hoa_sym_angles, 0, NULL); } return MAX_ERR_NONE; }
t_max_err number_of_channels_set(t_meter *x, t_object *attr, long argc, t_atom *argv) { t_object *b = NULL; int numberOfChannels; if(argc && argv && atom_gettype(argv) == A_LONG) { numberOfChannels = atom_getlong(argv); if(numberOfChannels != x->f_meter->getNumberOfChannels() && numberOfChannels > 0 && numberOfChannels <= MAX_SPEAKER) { int dspState = sys_getdspobjdspstate((t_object*)x); if(dspState) object_method(gensym("dsp")->s_thing, gensym("stop")); delete x->f_meter; delete x->f_vector; x->f_number_of_channels = numberOfChannels; x->f_meter = new Hoa2D::Meter(x->f_number_of_channels); x->f_vector = new Hoa2D::Vector(x->f_number_of_channels); object_obex_lookup(x, gensym("#B"), (t_object **)&b); object_method(b, gensym("dynlet_begin")); dsp_resize((t_pxobject*)x, x->f_number_of_channels); object_method(b, gensym("dynlet_end")); if (x->f_number_of_channels == 1) { object_attr_setdisabled((t_object*)x, gensym("angles"), 1); object_attr_setdisabled((t_object*)x, gensym("offset"), 1); object_attr_setdisabled((t_object*)x, gensym("rotation"), 1); } else { object_attr_setdisabled((t_object*)x, gensym("angles"), 0); object_attr_setdisabled((t_object*)x, gensym("offset"), 0); object_attr_setdisabled((t_object*)x, gensym("rotation"), 0); } object_attr_setvalueof(x, gensym("angles"), 0, NULL); } } return NULL; }
void hoa_gain_resize_io(t_hoa_gain *x, long newNumberOfChannel) { long lastNumberOfChannels = x->f_number_of_channels; newNumberOfChannel = Math<long>::clip(newNumberOfChannel, 1, MAX_IO); if (lastNumberOfChannels != newNumberOfChannel) { t_object *b = NULL; object_obex_lookup(x, hoa_sym_pound_B, (t_object **)&b); if (b) { object_method(b, hoa_sym_dynlet_begin); dsp_resize((t_pxobject*)x, newNumberOfChannel+1); outlet_delete(outlet_nth((t_object*)x, lastNumberOfChannels)); // delete value out outlet if(lastNumberOfChannels > newNumberOfChannel) { for(int i = lastNumberOfChannels; i > newNumberOfChannel; i--) { outlet_delete(outlet_nth((t_object*)x, i-1)); } } else if(lastNumberOfChannels < newNumberOfChannel) { for(int i = lastNumberOfChannels; i < newNumberOfChannel; i++) { outlet_append((t_object*)x, NULL, hoa_sym_signal); } } x->f_outlet_infos = outlet_append((t_object*)x, NULL, NULL); // restore value out outlet object_method(b, hoa_sym_dynlet_end); x->f_number_of_channels = newNumberOfChannel; } } }
t_max_err HoaRecomposer_set_attr_mode(t_HoaRecomposer *x, t_object *attr, long argc, t_atom *argv) { long lastNumberOfInputs = x->f_ambiRecomposer->getNumberOfInputs(); if(argc && argv) { int dspState = sys_getdspobjdspstate((t_object*)x); if(dspState) object_method(gensym("dsp")->s_thing, gensym("stop")); if(atom_gettype(argv) == A_SYM) { t_symbol* newModeSym = atom_getsym(argv); int newModeInt = (newModeSym == gensym("free")) ? Hoa_Free : (newModeSym == gensym("fisheye")) ? Hoa_Fisheye : 0; x->f_ambiRecomposer->setMode(newModeInt); } else if(atom_gettype(argv) == A_LONG || atom_gettype(argv) == A_FLOAT) { x->f_ambiRecomposer->setMode(atom_getfloat(argv)); } int newModeInt = x->f_ambiRecomposer->getMode(); x->f_mode = (newModeInt == Hoa_Free) ? gensym("free") : (newModeInt == Hoa_Fisheye) ? gensym("fisheye") : gensym("fixe"); if (lastNumberOfInputs != x->f_ambiRecomposer->getNumberOfInputs()) { t_object *b = NULL; object_obex_lookup(x, gensym("#B"), (t_object **)&b); object_method(b, gensym("dynlet_begin")); dsp_resize((t_pxobject*)x, x->f_ambiRecomposer->getNumberOfInputs()); object_method(b, gensym("dynlet_end")); } if(x->f_ambiRecomposer->getMode() == Hoa_Fixe) object_attr_setdisabled((t_object *)x, gensym("ramp"), 1); else object_attr_setdisabled((t_object *)x, gensym("ramp"), 0); } return MAX_ERR_NONE; }