struct envelope_t { /* 'Real world' AHDSR values */ double attack; double attack_hold; double decay; double sustain; double release; /* AHDR values in samples */ double attack_s; double attack_hold_s; double decay_s; double release_s; }; void env_init(struct envelope_t *env, double attack, double attack_hold, double decay, double sustain, double release); double env_getamplitude(struct envelope_t *env, uint32_t sample, uint32_t released);