ar madsr iatt, idec, islev, irel [, idel] [, ireltim]
kr madsr iatt, idec, islev, irel [, idel] [, ireltim]
iatt -- duration of attack phase
idec -- duration of decay
islev -- level for sustain phase
irel -- duration of release phase.
idel -- period of zero before the envelope starts
ireltim (optional, default=-1) -- Control release time after receiving a MIDI noteoff event. If less than zero, the longest release time given in the current instrument is used. If zero or more, the given value will be used for release time. Its default value is -1. (New in Csound 3.59 - not yet properly tested)
Please note that the release time cannot be longer than 32767/kr seconds.
The envelope is the range 0 to 1 and may need to be scaled further. The envelope may be described as:
Picture of an ADSR envelope.
The length of the sustain is calculated from the length of the note. This means adsr is not suitable for use with MIDI events. The opcode madsr uses the linsegr mechanism, and so can be used in MIDI applications.
Here is an example of the madsr opcode. It uses the files madsr.orc and madsr.sco.
Example 15-1. Example of the madsr opcode.
/* madsr.orc */
/* Written by Iain McCurdy */
; Initialize the global variables.
sr = 44100
kr = 441
ksmps = 100
nchnls = 1
; Instrument #1.
instr 1
; Attack time.
iattack = 0.5
; Decay time.
idecay = 0
; Sustain level.
isustain = 1
; Release time.
irelease = 0.5
aenv madsr iattack, idecay, isustain, irelease
a1 oscili 10000, 440, 1
out a1*aenv
endin
/* madsr.orc */
/* madsr.sco */
/* Written by Iain McCurdy */
; Table #1, a sine wave.
f 1 0 1024 10 1
; Leave the score running for 6 seconds.
f 0 6
; Play Instrument #1 for two seconds.
i 1 0 2
e
/* madsr.sco */