xadsr
Précédent | Opcodes et opérateurs de l'orchestre | Suivant

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

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.

Précédent | Niveau supérieur | Suivant
wterrain2 | Sommaire | xin