adsr — Calcule l'enveloppe ADSR classique à l'aide de segments linéaires.
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
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 :
La longueur de la période d'entretien est calculée à partir de la longueur de la note. C'est pourquoi adsr n'est pas adapté au traitement des évènements MIDI. L'opcode madsr utilise le mécanisme de linsegr, et peut donc être utilisé dans les applications MIDI.
adsr est nouveau dans la version 3.49 de Csound.
Voici un exemple de l'opcode adsr. Il utilise le fichier adsr.csd.
Exemple 47. Exemple de l'opcode adsr.
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 ;;;RT audio out ;-iadc ;;;uncomment -iadc if RT audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o adsr.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 adsr iatt, idec, islev, irel kcps = cpspch(p4) ;frequency asig vco2 kenv * 0.8, kcps outs asig, asig endin </CsInstruments> <CsScore> i 1 0 2 7.00 .0001 1 .5 .001 ; short attack i 1 3 2 7.02 1 .5 .5 .001 ; long attack i 1 6 2 6.09 .0001 1 .5 .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 48. 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>