(CHASE-ALG (NAME "chase") (ARGUMENTS ("sound_type" "input") ("double" "risetime") ("double" "falltime")) (STATE ("double" "level" "0.0") ("double" "upslope" "1.0/(input->sr * risetime)") ("double" "downslope" "1.0/(input->sr * falltime)")) (START (MIN input)) (INNER-LOOP " double x = input; if (x > level) { level += upslope; if (x < level) level = x; } else { level -= downslope; if (x > level) level = x; } output = (sample_type) level;") (TERMINATE (MIN input)) (LOGICAL-STOP (MIN input)) )