Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
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;
}
Esempio n. 5
0
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;
}
Esempio n. 7
0
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;
        }
    }
}
Esempio n. 9
0
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;
}