Пример #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;
}
Пример #2
0
t_max_err scope_setattr_order(t_scope *x, t_object *attr, long ac, t_atom *av)
{
    long d;
	if (ac && av)
    {
        if (atom_gettype(av) == A_LONG)
        {
            d = Tools::clip_min( long(atom_getlong(av)), long(1));
            if (d != x->f_order)
            {
                int dspState = sys_getdspobjdspstate((t_object*)x);
                if(dspState)
                    object_method(gensym("dsp")->s_thing, gensym("stop"));
                
                free(x->f_harmonicsValues);
                free(x->f_averageHarmo);
                delete x->f_viewer;
                x->f_viewer = new AmbisonicsViewer(d);
                x->f_order = x->f_viewer->getOrder();
                x->f_harmonicsValues = new double[x->f_order * 2 + 1];
                x->f_averageHarmo = new double[x->f_order * 2 + 1];
                scope_resize_inputs(x, x->f_order * 2 + 1);
                
                if(dspState)
                    object_method(gensym("dsp")->s_thing, gensym("start"));
            }
        }
	}
	return MAX_ERR_NONE;
}
Пример #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;
}
Пример #4
0
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);
    }
}
Пример #5
0
t_max_err configuration_set(t_HoaDecode *x, t_object *attr, long argc, t_atom *argv)
{
	if(atom_gettype(argv) == A_SYM)
	{
        int dspState = sys_getdspobjdspstate((t_object*)x);
        if(dspState)
            object_method(gensym("dsp")->s_thing, gensym("stop"));
        
        long numOutlet = x->f_AmbisonicsDecoder->getNumberOfOutputs();
		
        if(atom_getsym(argv) == gensym("binaural") || atom_getsym(argv) == gensym(" binaural"))
        {
            x->f_AmbisonicsDecoder->setMode(Hoa_Dec_Binaural);
            x->f_mode = gensym("binaural");
            
            object_attr_setdisabled((t_object *)x, gensym("angles"), 1);
            object_attr_setdisabled((t_object *)x, gensym("pinnaesize"), 0);
            object_attr_setdisabled((t_object *)x, gensym("loudspeakers"), 1);
            object_attr_setdisabled((t_object *)x, gensym("restitution"), 1);
        }
        else if(atom_getsym(argv) == gensym("irregular") || atom_getsym(argv) == gensym(" irregular"))
        {
            x->f_AmbisonicsDecoder->setMode(Hoa_Dec_Irregular);
            x->f_mode = gensym("irregular");

            object_attr_setdisabled((t_object *)x, gensym("angles"), 0);
            object_attr_setdisabled((t_object *)x, gensym("pinnaesize"), 1);
            object_attr_setdisabled((t_object *)x, gensym("loudspeakers"), 0);
            object_attr_setdisabled((t_object *)x, gensym("restitution"), 0);
        }
        else
        {
            x->f_AmbisonicsDecoder->setMode(Hoa_Dec_Ambisonic);
            x->f_mode = gensym("ambisonic");

            object_attr_setdisabled((t_object *)x, gensym("angles"), 1);
            object_attr_setdisabled((t_object *)x, gensym("pinnaesize"), 1);
            object_attr_setdisabled((t_object *)x, gensym("loudspeakers"), 0);
            object_attr_setdisabled((t_object *)x, gensym("restitution"), 1);
		}
        
        HoaDecode_resize_outlet(x, numOutlet);
        x->f_number_of_loudspeakers = x->f_AmbisonicsDecoder->getNumberOfOutputs();
        for(int i = 0; i < x->f_number_of_loudspeakers; i++)
            x->f_angles_of_loudspeakers[i] = x->f_AmbisonicsDecoder->getLoudspeakerAngle(i);
        object_attr_touch((t_object *)x, gensym("loudspeakers"));
        object_attr_touch((t_object *)x, gensym("angles"));
	}
    
    return NULL;
}
Пример #6
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;
}
Пример #7
0
/* Ambisonics */
t_max_err loudspeakers_set(t_HoaDecode *x, t_object *attr, long argc, t_atom *argv)
{
    int dspState = sys_getdspobjdspstate((t_object*)x);
    if(dspState)
        object_method(gensym("dsp")->s_thing, gensym("stop"));
        
    long numOutlet = x->f_AmbisonicsDecoder->getNumberOfOutputs();
    
    if(argc && argv && (atom_gettype(argv) == A_FLOAT || atom_gettype(argv) == A_LONG))
    {
        x->f_AmbisonicsDecoder->setNumberOfLoudspeakers(atom_getfloat(argv));
    }
    
    HoaDecode_resize_outlet(x, numOutlet);
    x->f_number_of_loudspeakers = x->f_AmbisonicsDecoder->getNumberOfOutputs();
    
    for(int i = 0; i < x->f_number_of_loudspeakers; i++)
        x->f_angles_of_loudspeakers[i] = x->f_AmbisonicsDecoder->getLoudspeakerAngle(i);
    object_attr_touch((t_object *)x, gensym("angles"));
    return NULL;
}
Пример #8
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;
}