xadsr
Prev | Orchestra Opcodes and Operators | Next

## xadsr

xadsr — Calculates the classical ADSR envelope.

## Description

Calculates the classical ADSR envelope

## Syntax

    ares xadsr iatt, idec, islev, irel [, idel]

    kres xadsr iatt, idec, islev, irel [, idel]

## Initialization

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

## Performance

The envelope generated is the range 0 to 1 and may need to be scaled further, depending on the amplitude required. If using 0dbfs = 1, scaling down will probably be required since playing more than one note might result in clipping. If not using 0dbfs, scaling to a large amplitude (e.g. 32000) might be required.

The envelope may be described as:

Picture of an exponential ADSR envelope.

The length of the sustain is calculated from the length of the note. This means xadsr is not suitable for use with MIDI events, use mxadsr instead. The opcode xadsr is identical to adsr except it uses exponential, rather than linear, line segments.

## Examples

Here is an example of the xadsr opcode. It uses the file xadsr.csd.

Example 1219. Example of the xadsr opcode.

See the sections Real-time Audio and Command Line Flags for more information on using command line flags.

    <CsoundSynthesizer>
    <CsOptions>
    ; Select audio/midi flags here according to platform
    -odac     ;;;realtime audio out
    ;-iadc    ;;;uncomment -iadc if RT audio input is needed too
    ; For Non-realtime ouput leave only the line below:
    ; -o xadsr.wav -W ;;; for file output any platform
    </CsOptions>
    <CsInstruments>

    sr = 44100
    ksmps = 32
    nchnls = 2
    0dbfs = 1

    instr 1

    iatt  = p5
    idec  = p6
    islev = p7
    irel  = p8

    kenv	xadsr iatt, idec, islev, irel
    kcps =  cpspch(p4) 	  ;frequency

    asig	vco2  kenv * 0.8, kcps
    	outs  asig, asig

    endin

    </CsInstruments>
    <CsScore>

    i 1  0  1  7.00  .0001  1  .01  .001 ; short attack
    i 1  2  1  7.02  1  .5  .01  .001    ; long attack
    i 1  4  2  6.09  .0001  1 .1  .7     ; long release

    e
    </CsScore>
    </CsoundSynthesizer>

Here is an example for the adsr-group, comparing the different adsr opcodes. It uses the file adsr-group.csd.

Example 1220. Example of the adsr group.

    <CsoundSynthesizer>
    <CsOptions>
    ; Select audio/midi flags here according to platform
    -odac    ;;;realtime audio out
    ;-iadc    ;;;uncomment -iadc if realtime audio input is needed too
    ; For Non-realtime ouput leave only the line below:
    ; -o adsr-group.wav -W ;;; for file output any platform
    </CsOptions>
    <CsInstruments>

    ; by Menno Knevel - 2021

    sr = 44100
    ksmps = 32
    nchnls = 2
    0dbfs  = 1

    ; both amplitude and filter use same ADSR curves
    instr 1
    kenv	adsr	.01, .5, .5, p4    	; linear envelope
    asig	vco2	kenv, 110			; A+D+S+R = p3
    asig	rezzy	asig, 500+(kenv*1000), 10	; same curve but scaled
    		outs	asig, asig
    endin

    instr 2	; midi behavior
    kenv	madsr	.01, .5, .5, p4		; linear envelope
    asig	vco2	kenv, 110			; A+D+S = p3, then go into Release stage
    asig	rezzy	asig, 500+(kenv*1000), 10	; same curve but scaled
    		outs	asig, asig
    endin

    instr 3
    kenv	xadsr	.01, .5 , .5, p4    ; exponential envelope
    asig	vco2	kenv, 110			; A+D+S+R = p3
    asig	rezzy	asig, 500+(kenv*1000), 10	; same curve but scaled
    		outs	asig, asig
    endin

    instr 4	; midi behavior
    kenv	mxadsr	.01, .5 , .5, p4	; exponential envelope
    asig	vco2	kenv, 110			; A+D+S = p3, then go into Release stage
    asig	rezzy	asig, 500+(kenv*1000), 10	; same curve but scaled
    		outs	asig, asig
    endin

    </CsInstruments>
    <CsScore>
    s
    i1 1 2 .01	; same notes for everyone!
    i1 5 . .5
    i1 9 . 1.5
    s
    i2 1 2 .01
    i2 5 . .5
    i2 9 . 1.5
    s
    i3 1 2 .01
    i3 5 . .5
    i3 9 . 1.5
    s
    i4 1 2 .01
    i4 5 . .5
    i4 9 . 1.5
    e
    </CsScore>
    </CsoundSynthesizer>

## See Also

adsr, madsr, mxadsr

## Credits

Author: John ffitch xadsr is new in Csound version 3.51.

Prev | Up | Next
wterrain2 | Home | xin