xadsr — Calcule l'enveloppe ADSR classique.
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 :
Image d'une enveloppe ADSR.
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.
Voici un exemple de l'opcode xadsr. Il utilise le fichier xadsr.csd.
Exemple 1024. 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>