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);
    }
}
Пример #2
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);
    }
}
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;
        }
    }
}
Пример #4
0
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;
}