bool32.rising trigger
frac32.positive envelope output
frac32.s.map.klineartime.exp a
frac32.u.map h
frac32.u.map t
frac32.s.map.kdecaytime.exp d
int8_t stage;
int ntrig;
int32_t val;
ntrig = 0;
val = 0;
if ((inlet_trig > 0) && !ntrig) {
ntrig = 1;
stage = 1;
} else if (!(inlet_trig > 0)) {
ntrig = 0;
}
if (stage == 0) {
val = ___SMMUL(val, param_d) << 1;
} else {
if (val < param_t) {
val = param_t;
};
int32_t t;
MTOF(-param_a, t);
val = val + (t >> 3);
if (val < 0) {
val = 0x7FFFFFFF;
stage = 0;
}
}
int32_t env = val >> 4;
env += ___SMMUL(param_t << 3, env << 4);
env -= param_t << 2;
env = __USAT(env, 27);
env = __USAT(env + ___SMMUL(param_h << 4, env << 4), 27);
outlet_env = env;