void hoa_3d_decoder_resize_outlets(t_hoa_3d_decoder *x) { t_object *b = NULL; object_obex_lookup(x, hoa_sym_pound_B, (t_object **)&b); if (b) { object_method(hoa_sym_dsp->s_thing, hoa_sym_stop); object_method(b, hoa_sym_dynlet_begin); if(outlet_count((t_object *)x) > x->f_decoder->getNumberOfPlanewaves()) { for(int i = outlet_count((t_object *)x); i > x->f_decoder->getNumberOfPlanewaves(); i--) { outlet_delete(outlet_nth((t_object*)x, i-1)); } } else if(outlet_count((t_object *)x) < x->f_decoder->getNumberOfPlanewaves()) { for(int i = outlet_count((t_object *)x); i < x->f_decoder->getNumberOfPlanewaves(); i++) { outlet_append((t_object*)x, NULL, hoa_sym_signal); } } object_method(b, hoa_sym_dynlet_end); } }
void HoaDecode_resize_outlet(t_HoaDecode *x, long lastNumberOfOutlet) { int dspState = sys_getdspobjdspstate((t_object*)x); if(dspState) object_method(gensym("dsp")->s_thing, gensym("stop")); t_object *b = NULL; object_obex_lookup(x, gensym("#B"), (t_object **)&b); object_method(b, gensym("dynlet_begin")); if(lastNumberOfOutlet > x->f_AmbisonicsDecoder->getNumberOfOutputs()) { for(int i = lastNumberOfOutlet; i > x->f_AmbisonicsDecoder->getNumberOfOutputs(); i--) { outlet_delete(outlet_nth((t_object*)x, i-1)); } } else if(lastNumberOfOutlet < x->f_AmbisonicsDecoder->getNumberOfOutputs()) { for(int i = lastNumberOfOutlet; i < x->f_AmbisonicsDecoder->getNumberOfOutputs(); i++) { outlet_append((t_object*)x, NULL, gensym("signal")); } } object_method(b, gensym("dynlet_end")); if(x->f_send_config) { HoaDecode_send_configuration(x); HoaDecode_send_angles(x); HoaDecode_reconnect_outlet(x); } }
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 channel_set(t_hoa_decoder *x, t_object *attr, long argc, t_atom *argv) { t_object *b = NULL; if(argc && argv && atom_gettype(argv) == A_LONG && atom_getlong(argv) != x->f_decoder->getNumberOfChannels()) { if(x->f_decoder->getDecodingMode() != Hoa2D::DecoderMulti::Regular || atom_getlong(argv) >= x->f_decoder->getNumberOfHarmonics()) { object_method(gensym("dsp")->s_thing, gensym("stop")); object_obex_lookup(x, gensym("#B"), (t_object **)&b); object_method(b, gensym("dynlet_begin")); long last_number_of_channels = x->f_decoder->getNumberOfChannels(); x->f_decoder->setNumberOfChannels(atom_getlong(argv)); if(last_number_of_channels > x->f_decoder->getNumberOfChannels()) { for(int i = last_number_of_channels; i > x->f_decoder->getNumberOfChannels(); i--) { outlet_delete(outlet_nth((t_object*)x, i-1)); } } else if(last_number_of_channels < x->f_decoder->getNumberOfChannels()) { for(int i = last_number_of_channels; i < x->f_decoder->getNumberOfChannels(); i++) { outlet_append((t_object*)x, NULL, gensym("signal")); } } object_method(b, gensym("dynlet_end")); object_attr_touch((t_object *)x, gensym("angles")); } } send_configuration(x); return 0; }