Ejemplo n.º 1
0
void autocolorbox(t_object *x)
{
	double		color[4] = {0.7, 0.4, 0.3, 1.0};
	t_object	*box = NULL;
	
	object_obex_lookup(x, _sym_pound_B, &box);
	object_attr_setdouble_array(box, _sym_color, 4, color);
}
t_max_err mode_set(t_hoa_3d_decoder *x, t_object *attr, long argc, t_atom *argv)
{
	if(argc && argv && atom_gettype(argv) == A_SYM)
	{
        t_symbol* mode = atom_getsym(argv);
        
        if(mode == hoa_sym_ambisonic) // retro-compatibility
        {
            mode = hoa_sym_regular;
        }
        
        if (mode != x->f_mode)
        {
            if(mode == hoa_sym_regular)
            {
                object_method(hoa_sym_dsp->s_thing, hoa_sym_stop);
                
                ulong order = x->f_decoder->getDecompositionOrder();
                x->f_decoder = SharedPtr<Decoder<Hoa3d, float>>(new Decoder<Hoa3d, float>::Regular(order, (order+1)*(order+1)));
                
                x->f_mode = mode;
                object_attr_setdisabled((t_object *)x, hoa_sym_angles, 0);
                object_attr_setdisabled((t_object *)x, hoa_sym_offset, 0);
                object_attr_setdisabled((t_object *)x, hoa_sym_channels, 0);
                
                object_attr_setdouble_array(x, hoa_sym_offset, 3, x->f_offsets);
                x->f_number_of_channels = x->f_decoder->getNumberOfPlanewaves();
                object_attr_touch((t_object *)x, hoa_sym_channels);
                object_attr_touch((t_object *)x, hoa_sym_angles);
                hoa_3d_decoder_resize_outlets(x);
            }
            else if(mode == hoa_sym_binaural)
            {
                object_method(hoa_sym_dsp->s_thing, hoa_sym_stop);
                
                ulong order = x->f_decoder->getDecompositionOrder();
                x->f_decoder = SharedPtr<Decoder<Hoa3d, float>>(new Decoder<Hoa3d, float>::Binaural(order));
                
                x->f_mode = mode;
                object_attr_setdisabled((t_object *)x, hoa_sym_angles, 1);
                object_attr_setdisabled((t_object *)x, hoa_sym_offset, 1);
                object_attr_setdisabled((t_object *)x, hoa_sym_channels, 1);
                
                x->f_mode = mode;
                x->f_number_of_channels = 2;
                object_attr_touch((t_object *)x, hoa_sym_channels);
                object_attr_touch((t_object *)x, hoa_sym_angles);
                hoa_3d_decoder_resize_outlets(x);
            }
        }
    }
    return MAX_ERR_NONE;
}