Exemplo n.º 1
0
bool Event_channel_slide_lowpass_process(
        Channel* ch,
        Device_states* dstates,
        const Value* value)
{
    assert(ch != NULL);
    assert(dstates != NULL);
    (void)dstates;
    assert(value != NULL);
    assert(value->type == VALUE_TYPE_FLOAT);

    const double target_cutoff = value->value.float_type;
    const double target_cutoff_exp = exp2((target_cutoff + 86) / 12);
    const double inf_limit = exp2((86.0 + 86) / 12);

    for (int i = 0; i < KQT_GENERATORS_MAX; ++i)
    {
        Event_check_voice(ch, i);
        Voice_state* vs = ch->fg[i]->state;
        if (Slider_in_progress(&vs->lowpass_slider))
            Slider_change_target(&vs->lowpass_slider, target_cutoff_exp);
        else
            Slider_start(&vs->lowpass_slider,
                         target_cutoff_exp,
                         isfinite(vs->lowpass) ? vs->lowpass : inf_limit);
    }

    return true;
}
Exemplo n.º 2
0
void Linear_controls_slide_value_target(Linear_controls* lc, double value)
{
    rassert(lc != NULL);
    rassert(isfinite(value));

    if (Slider_in_progress(&lc->slider))
        Slider_change_target(&lc->slider, value);
    else
        Slider_start(&lc->slider, value, lc->value);

    return;
}
Exemplo n.º 3
0
bool Event_master_slide_volume_process(
        Master_params* master_params, const Event_params* params)
{
    rassert(master_params != NULL);
    rassert(params != NULL);
    rassert(params->arg != NULL);
    rassert(params->arg->type == VALUE_TYPE_FLOAT);

    const double target = exp2(params->arg->value.float_type / 6);

    if (Slider_in_progress(&master_params->volume_slider))
        Slider_change_target(&master_params->volume_slider, target);
    else
        Slider_start(&master_params->volume_slider, target, master_params->volume);

    return true;
}