frac32buffer in
frac32 mod
frac32 damp
frac32 rate
frac32buffer out
frac32.u.map mod
frac32.u.map rate
frac32.s.map.pitch damp
int32_t O1;
int32_t prev;
int32_t cap1;
int32_t cap2;
SINE2TINTERP(1 << 30, O1)
int32_t damp;
MTOF(param_damp + inlet_damp, damp)
int32_t Rate = param_rate + inlet_rate;
int32_t mod = param_mod + inlet_mod;
int32_t in = inlet_in;
int32_t comp;
int32_t offs;
comp = in / (mod + 1) * (mod + 1);
int32_t rate = (comp - cap1) << 1;
rate = rate > Rate ? Rate : rate;
rate = rate < -Rate ? -Rate : rate;
cap1 = ___SMMLA(rate, damp, cap1);
outlet_out = in - cap1;
prev = inlet_in;