t_pd_err channels_set(t_hoa_meter *x, void *attr, long argc, t_atom *argv) { t_atom* av; if(argc && argv) { if(atom_gettype(argv) == A_FLOAT) { long d = pd_clip_minmax(atom_getfloat(argv), 1, MAX_SPEAKER); if(d != x->f_meter->getNumberOfChannels()) { int dspState = canvas_suspend_dsp(); delete x->f_meter; x->f_meter = new Meter(d); delete x->f_vector; x->f_vector = new Vector(d); av = new t_atom[x->f_meter->getNumberOfChannels()]; for(int i = 0; i < x->f_meter->getNumberOfChannels(); i++) { atom_setfloat(av+i, x->f_meter->getChannelAzimuth(i) / HOA_2PI * 360.); x->f_over_leds[i] = 0; } angles_set(x, NULL, x->f_meter->getNumberOfChannels(), av); eobj_resize_inputs((t_ebox *)x, x->f_meter->getNumberOfChannels()); canvas_resume_dsp(dspState); } } } return NULL; }
t_pd_err set_order(t_hoa_scope *x, t_object *attr, long ac, t_atom *av) { long order; if (ac && av && atom_gettype(av) == A_LONG) { order = atom_getlong(av); if(order != x->f_scope->getDecompositionOrder() && order > 0) { int dspState = canvas_suspend_dsp(); delete x->f_scope; delete [] x->f_signals; x->f_scope = new Hoa2D::Scope(order, NUMBEROFCIRCLEPOINTS_UI); x->f_order = x->f_scope->getDecompositionOrder(); x->f_signals = new t_float[x->f_scope->getNumberOfHarmonics() * SYS_MAXBLKSIZE]; eobj_resize_inputs((t_ebox *)x, x->f_scope->getNumberOfHarmonics()); canvas_update_dsp(); canvas_resume_dsp(dspState); } } return 0; }