Extend the duration of real-time generated events and handle their extra life (see also linenr).
xtratim extends current MIDI-activated note duration of iextradur seconds after the corresponding noteoff message has deactivated current note itself. This opcode has no output arguments.
This opcode is useful for implementing complex release-oriented envelopes.
instr 1 ;allows complex ADSR envelope with MIDI events
inum notnum
icps cpsmidi
iamp ampmidi 4000
;
;------- complex envelope block ------
xtratim 1 ;extra-time, i.e. release dur
krel init 0
krel release ;outputs release-stage flag (0 or 1 values)
if (krel .5) kgoto rel ;if in release-stage goto release section
;
;************ attack and sustain section ***********
kmp1 linseg 0, .03, 1, .05, 1, .07, 0, .08, .5, 4, 1, 50, 1
kmp = kmp1*iamp
kgoto done
;
;--------- release section --------
rel:
kmp2 linseg 1, .3, .2, .7, 0
kmp = kmp1*kmp2*iamp
done:
;------
a1 oscili kmp, icps, 1
out a1
endin