(TONEV-ALG (NAME "tonev") (ARGUMENTS ("sound_type" "s1") ("sound_type" "hz")) (INLINE-INTERPOLATION T) (INTERNAL-SCALING s1) (ALWAYS-SCALE hz) (START (MAX s1 hz)) (TERMINATE (MIN s1 hz)) (LOGICAL-STOP (MIN s1)) (STATE ("double" "scale1" "s1->scale") ("double" "c2" "0.0") ("double" "c1" "0.0") ("double" "prev" "0.0; hz->scale = (sample_type) (hz->scale * (PI2 / s1->sr))")) (SAMPLE-RATE (MAX s1)) (STEP-FUNCTION hz) (DEPENDS ("b" "hz" "2.0 - cos(hz)" TEMP "register double") ("c2" "hz" "b - sqrt((b * b) - 1.0)") ("c1" "hz" "(1.0 - c2) * scale1")) (CONSTANT "c1" "c2" "b" "scale1") (FORCE-INTO-REGISTER scale1) (INNER-LOOP " output = (sample_type) (prev = c1 * s1 + c2 * prev)") )