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; }
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; }
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; }