xadsr

xadsr — Calcule l'enveloppe ADSR classique.

Description

Calcule l'enveloppe ADSR classique.

Syntaxe

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

Initialisation

iatt -- durée de l'attaque (attack)

idec -- durée de la première chute (decay)

islev -- niveau d'entretien (sustain)

irel -- durée de la chute (release)

idel -- délai de niveau zéro avant le démarrage de l'enveloppe

Exécution

L'enveloppe générée évolue dans l'intervalle de 0 à 1 et peut nécessiter un changement d'échelle par la suite, en fonction de l'amplitude demandée. Si l'on utilise 0dbfs = 1, il sera probablement nécessaire de diminuer l'amplitude de l'enveloppe car plusieurs notes simultanées peuvent provoquer un écrêtage. Si l'on utilise pas 0dbfs, une mise à l'échelle à une grande amplitude (par exemple 32000) sera peut-être nécessaire.

Voici une description de l'enveloppe :

Image d'une enveloppe ADSR exponentielle.

Image d'une enveloppe ADSR exponentielle.

La longueur de la période d'entretien est calculée à partir de la longueur de la note. C'est pourquoi xadsr n'est pas adapté au traitement des évènements MIDI, pour lesquels il faut plutôt utiliser mxadsr. L'opcode xadsr est identique à adsr sauf qu'il utilise des segments exponentiels plutôt que linéaires.

Exemples

Voici un exemple de l'opcode xadsr. Il utilise le fichier xadsr.csd.

Exemple 1218. Exemple de l'opcode xadsr.

Voir les sections Audio en Temps Réel et Options de la Ligne de Commande pour plus d'information sur l'utilisation des options de la ligne de commande.

<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>


Voici un exemple pour le groupe adsr, comparant les différents opcodes adsr. Il utilise le fichier adsr-group.csd.

Exemple 1219. Exemple du groupe adsr.

<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>


Voir aussi

adsr, madsr, mxadsr

Crédits

Auteur : John ffitch xadsr est nouveau dans la version 3.51 de Csound.