# Durées avec enveloppes

Dans une section précédente, nous avons vu comment nous pouvions utiliser la commande sleep pour contrôler le moment du déclenchement de nos sons. Toutefois, nous n’avons pas encore été capables de contrôler la durée des sons.

Dans le but de nous offrir des moyens simples mais puissants de contrôle de durée de nos sons, Sonic Pi fournit la technique d’enveloppe d’amplitude ADSR (nous expliquerons ce que ADSR signifie plus loin dans cette section). Une enveloppe d’amplitude offre deux moyens utiles de contrôle :

- contrôle sur la durée d’un son
- contrôle sur l’amplitude d’un son

## Durée

La durée est le temps pendant lequel le son se maintient. Une longue durée signifie que vous entendez le son plus longtemps. Les sons de Sonic Pi ont tous une enveloppe d’amplitude, et la durée totale de cette enveloppe est la durée du son. Ainsi, en contrôlant l’enveloppe, vous contrôlez la durée.

## Amplitude

L’enveloppe ADSR non seulement contrôle la durée, mais vous donne aussi un contrôle fin sur l’amplitude du son. Tous les sons commencent et finissent par le silence, avec une part non silencieuse entre. Les enveloppes vous permettent de faire évoluer ou de maintenir l’amplitude des parties non-silencieuses du son. C’est comme si vous donniez à quelqu’un des instructions sur comment augmenter ou diminuer le volume d’un ampli de guitare. Par exemple, vous pourriez demander à quelqu’un de “commencer en silence, d’augmenter lentement le volume jusqu’au maximum, le maintenir un moment, puis revenir rapidement au silence”. Sonic Pi vous permet de programmer ceci avec les enveloppes.

Juste pour se remémorer, une amplitude de 0 est le silence et une amplitude de 1 est le volume normal.

Maintenant, regardons chaque partie de l’enveloppe tour à tour.

## Durée d’extinction (Release)

La seul partie de l’enveloppe qui est utilisée par défaut est la durée d’extinction. C’est la durée qu’il faut pour que le son du synthé se termine. Tous les synthés ont une durée de “release” de 1, ce qui signifie qu’ils ont une durée d’un temps musical (qui par défaut est 1 seconde) avant extinction :

    play 70

Cette note va être audible pendant 1 seconde. Vous pouvez chronométrer :-) C’est la version abrégée de la version longue plus explicite :

    play 70, release: 1

Observez comme cela sonne exactement pareil (le son dure pendant une seconde). Néanmoins, c’est désormais très simple de changer la durée en modifiant la valeur de l’option `release:` :

    play 60, release: 2

Nous pouvons faire jouer un synthé pendant une très courte durée en utilisant une durée de “release” très petite :

    play 60, release: 0.2

La durée d’extinction du son est appelée “phase d’extinction” et est par défaut une transition linéaire (c’est-à-dire une ligne droite). Le schéma suivant illustre cette transition :

La ligne verticale tout à gauche du schéma montre que le son démarre de l’amplitude 0, mais monte jusqu’à l’amplitude totale immédiatement (c’est la phase d’attaque que nous couvrirons ensuite). Une fois à l’amplitude totale, il redescend en ligne droite jusqu’à zéro en prenant le temps spécifié par `release:`. Des durées de “release” plus longues produisent des fondus à la fermeture de synthé plus longs.

Vous pouvez ainsi changer la durée de vos sons en changeant la durée d’extinction. Jouez un moment en ajoutant des durées de “release” à votre musique.

## Phase d’attaque

Par défaut, la phase d’attaque est fixée à 0 pour tous les synthés, ce qui signifie qu’ils évoluent de l’amplitude 0 à l’amplitude 1 immédiatement. Cela donne initialement au synthé un son percussif. Toutefois, vous pouvez souhaiter une montée progressive de votre son. Ceci peut être obtenu avec l’option `attack:`. Essayez des montées progressives de quelques sons :

    play 60, attack: 2
    sleep 3
    play 65, attack: 0.5

Vous pouvez utiliser des options multiples en même temps. Par exemple, pour une attaque courte et une extinction lente, essayez :

    play 60, attack: 0.7, release: 4

Cette attaque courte et cette extinction lente sont illustrées dans le schéma suivant :

Bien entendu, vous pouvez inverser les choses. Essayez une attaque longue et une extinction rapide :

    play 60, attack: 4, release: 0.7

Finalement, vous pouvez aussi avoir à la fois une attaque et une extinction rapides pour des sons plus courts.

    play 60, attack: 0.5, release: 0.5

## Durée de soutien (“Sustain”)

En plus de spécifier des durées d’attaque et d’extinction, vous pouvez aussi spécifier une durée de soutien. C’est la durée pendant laquelle le son est maintenu à l’amplitude maximale entre les phases d’attaque et d’extinction.

    play 60, attack: 0.3, sustain: 1, release: 1

La durée de soutien est utile pour des sons importants auxquels vous voulez donner une présence permanente dans le mixage avant d’entrer dans une phase optionnelle d’extinction. Bien entendu, c’est entièrement valide de fixer à la fois les options d’attaque et d’extinction à 0 et d’utiliser seulement le soutien pour n’avoir absolument pas de montée et d’extinction progressives. Cependant, faites attention, une durée d’extinction de 0 peut produire des clics dans l’écoute et c’est souvent mieux d’utiliser une très petite valeur comme 0.2.

## Phase de déclin (“Decay”)

Finalement, pour les cas où vous aurez besoin d’un niveau de contrôle supplémentaire, vous pourrez aussi spécifier une durée de déclin. C’est la phase de l’enveloppe qui s’intercale entre les phases d’attaque et de soutien et qui spécifie la durée pendant laquelle l’amplitude va descendre du niveau `attack_level:` jusqu’au niveau `decay_level:` (qui si on ne le définit pas explicitement sera égal au `sustain_level:`). Par défaut, l’option `decay:` est à 0 et à la fois les niveaux “attack” et “sustain” sont à 1. Ainsi vous aurez besoin de les spécifier en plus de la durée de déclin pour obtenir un effet :

    play 60, attack: 0.1, attack_level: 1, decay: 0.2, sustain_level: 0.4, sustain: 1, release: 0.5

## Niveau de chute

Une dernière astuce est que même si l’option `decay_level:` a par défaut la même valeur que `sustain_level:`, on peut leur donner explicitement des valeurs différentes pour un contrôle complet de l’enveloppe. Cela nous permet de créer des enveloppes comme ceci :

    play 60, attack: 0.1, attack_level: 1, decay: 0.2, decay_level: 0.3, sustain: 1, sustain_level: 0.4, release: 0.5

Il est aussi possible de choisir un `decay_level:` plus haut que le `sustain_level:` :

    play 60, attack: 0.1, attack_level: 0.1, decay: 0.2, decay_level: 1, sustain: 0.5, sustain_level: 0.8, release: 1.5

## Enveloppes ADSR

Ainsi pour résumer, les enveloppes de Sonic Pi ont les phases suivantes :

1. attack - durée de passage de l’amplitude 0 jusqu’au niveau `attack_level`,
2. decay - durée pour passer l’amplitude du niveau `attack_level` jusqu’au niveau `decay_level` ,
3. sustain - durée pour faire passer l’amplitude du niveau `decay_level` au niveau `sustain_level`,
4. release - durée pour passer l’amplitude du niveau `sustain_level` au niveau 0

Il est important de noter que la durée d’un son est la somme des durées de chacune de ces phases. Ainsi le son suivant aura une durée de 0.5 + 1 + 2 + 0.5 = 4 temps musicaux :

    play 60, attack: 0.5, attack_level: 1, decay: 1, sustain_level: 0.4, sustain: 2, release: 0.5

Maintenant, allez et jouez un moment en ajoutant des enveloppes à vos sons.