| Look at release/xtratim opcodes already implemented in public version (in particular the
example):
xtratim iextradur
kflag release
DESCRIPTION
Extend the duration of realtime generated events and handle their extra life.
INITIALIZATION
iextradur - additional duration of current instrument instance
PERFORMANCE
xtratim exetends current MIDI-activated note duration of iextradur seconds
after the corresponding note-off message has deactivated current note itself.
This opcode has no output arguments.
release outputs current note state. If current note is in the release stage
(i.e. if its duration has been exetended with xtratim opcode and if it has
only just deactivated), kflag output argument is set to 1, else (in sustain
stage of current note) is set to 0.
These two opcodes are useful for implementing complex release-oriented envelopes.
Example:
instr 1 ;allows complex ADSR envelope with MIDI events
inum notnum
icps cpsmidi
iamp ampmidi 4000
;
;############## complex envelope section ##############
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 relase-stage goto relase 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
Aaron Isaksen wrote:
>
> I have asked Prof. Vercoe to add an opcode to extended csound that would
> perform a conditional goto only at the release of a note. I'm planning on
> using this for realtime with midi, where the length of a note is not known
> (no p3).
>
> I don't think there is a way to do this using an if statement.
>
> If the community thinks this is a useful opcode, could someone add it to
> the public csound distribution?
>
> Thank you,
>
> -Aaron Isaksen
--
Gabriel Maldonado
|