frac32buffer in
frac32buffer out
frac32.u.map mod1
frac32.u.map mod2
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, damp)
int32_t in = inlet_in;
int32_t comp;
int32_t offs;
comp = in > prev ? -param_mod1 : param_mod1;
offs = in > 0 ? -param_mod2 : param_mod2;
int32_t rate = (comp + offs - cap1) << 1;
rate = rate > param_rate ? param_rate : rate;
rate = rate < -param_rate ? -param_rate : rate;
cap1 = ___SMMLA(rate, damp, cap1);
outlet_out = in + cap1;
prev = inlet_in;