2.4 Duració i envolupants

# Duració amb envolupants

En una secció anterior hem vist com podem utilitzar l'ordre `sleep`per controlar quan disparar els sons. No obstant això, encara no hem pogut controlar la duració dels sons.

Amb l'objectiu de donar una manera senzilla però potent de *controlar la duració* dels sons, Sonic Pi proporciona el concepte d'una *envolupant d'amplitud ADSR* (exposarem més endavant en aquesta secció què significa ADSR). Una envolupant d'amplitud ofereix el control de dos aspectes molt útils:

* control sobre la duració del so
* control sobre l'amplitud del so

## Duració

La duració és la longitud del so. Una duració major significa que escoltareu el so més temps. Tots els sons de Sonic Pi tenen una envolupant de control de l'amplitud, i la duració total de l'envolupant és la duració del so. Per tant, quan controlem la envolupant controlem la duració.

## Amplitud

L'envolupant ADSR no només controla la duració, també permet un *control acurat de l'amplitud del so*. Tots els sons audibles comencen i acaben en silenci, i contenen parts no silencioses enmig. Les envolupants permeten lliscar i mantenir l'amplitud de les parts no silencioses. És com donar-li instruccions a algú sobre com pujar i baixar el volum de l'amplificador d'una guitarra. Per exemple, podeu demanar-li a algú: "comença en silenci, puja lentament fins al volum màxim, manté un moment i ràpidament torna al silenci". Sonic Pi permet programar exactament aquest comportament amb envolupants.

Només per recapitular el que ja hem vist abans, una amplitud de 0 és silenci i una amplitud d'1 és volum normal.

Ara, fem una ullada a cadascuna de les parts de les envolupants.

## Fase d'extinció (Release)

L'única part de l'envolupant que s'utilitza per defecte és el temps d'extinció (release). És el temps que tarda el so del sintetitzador fins que desapareix. Tots els sintetitzadors tenen un temps d'extinció de valor 1, que significa que per defecte té una duració d'una pulsació (amb una velocitat per defecte de 60 BPM, aquest so durarà un segon):

```
play 70
```

La nota serà audible durant 1 segon. Vinga, cronometreu-ho :-) Aquesta és la manera més curta de dir el mateix que:

```
play 70, release: 1
```

Noteu com els sons sonen exactament igual (el so dura un segon). No obstant això, ara és molt fàcil canviar la duració només modificant el valor de l'opció `release:`:

```
play 60, release: 2
```

Podem fer que el so del sintetitzador sone durant un període molt curt de temps fent servir un temps d'extinció molt curt:

```
play 60, release: 0.2
```

La duració de l'extinció del so és el que s'anomena *fase d'extinció* i per defecte és una transició lineal (això és, una línia recta). El diagrama següent il·lustra aquesta transició:

![Envolupant d'extinció(release envelope)](../../../etc/doc/images/tutorial/env-release.png)

La línia vertical a l'esquerra del diagrama mostra que el so comença amb amplitud 0, però arriba immediatament a amplitud completa (això és la fase d'atac, de la qual en parlarem a continuació). Una vegada l'amplitud ha arribat al seu punt màxim, es mou en línia recta cap avall fins arribar a 0, prenent la quantitat de temps especificada en `release:`. *Quan més llargs són els temps d'extinció (release), més tarda el sintetitzador a esvair el so."

Podeu, per tant, canviar la duració del so canviant el temps d'extinció (release). Proveu d'afegir temps d'extinció a la música.

## Fase d'atac

Per defecte, la *fase d'atac* és 0 per a tots els sintetitzadors, fet que significa que passen immediatament d'amplitud 0 a 1. Això li dona al sintetitzador un so inicial percussiu. No obstant això, podríeu desitjar que el so s'inicie de manera gradual. Això s'assoleix amb l'opció `attack:`. Proveu-ho amb diferents sons:

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

Podeu utilitzar diverses opcions al mateix temps. Per exemple, per a un atac curt i una extinció llarga, proveu:

```
play 60, attack: 0.7, release: 4
```

Aquest envolupant de curt atac i llarga extinció es troba il·lustrat al següent diagrama:

![envolupant d'atac i extinció](../../../etc/doc/images/tutorial/env-attack-release.png)

Per descomptat, podeu canviar les coses. Proveu un atac llarg i una breu extinció:

```
play 60, attack: 4, release: 0.7
```

![envolupant amb atac llarg i extinció curta](../../../etc/doc/images/tutorial/env-long-attack-short-release.png)

Finalment, podeu obtenir un atac i una extinció curtes per a sons curts.

```
play 60, attack: 0.5, release: 0.5
```

![envolupant amb atac curt i extinció curta](../../../etc/doc/images/tutorial/env-short-attack-short-release.png)

## Fase de sosteniment

A més d'especificar els temps d'atac i d'extinció, també podeu especificar un temps de sosteniment per a controlar la *fase de sosteniment*. Aquest és el temps durant el qual el so es manté en la seua amplitud màxima entre les fases d'atac i extinció.

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

![envolupant ASR](../../../etc/doc/images/tutorial/env-attack-sustain-release.png)

El temps de manteniment és útil per als sons que vulgueu ressaltar a la mescla, abans d’entrar en una fase opcional d'extinció. Per descomptat, és totalment vàlid definir tant `attack:` com `release:` a 0 i utilitzar només el sosteniment (sustain); d'aquesta manera, el so apareixerà i desapareixerà de colp. Tanmateix, tingueu en compte que una extinció (release) de 0 pot produir clics a l'àudio i sovint és millor utilitzar un valor molt reduït com ara 0,2.

## Fase de caiguda (decay)

Per obtenir un nivell addicional de control, també podeu especificar un temps de caiguda (decay). Es tracta d’una fase de l'envolupant que es troba entre les fases d’atac i de sosteniment (sustain) i simbolitza el temps que tarda l'amplitud en baixar des del nivell d'atac (`atac_level:`) fins al nivell de caiguda (`sustain_level:`). El `decay_level:`té per defecte el mateix valor que el nivell de sosteniment (`sustain_level:`).Per defecte, el valor de l'opció `decay:` és 0 i tant els nivells d’atac com de sosteniment són 1, així que haureu d’especificar-los per què el temps de caiguda (decay) tinga efecte:

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

![envolupant ADSR](../../../etc/doc/images/tutorial/env-attack-decay-sustain-release.png)

## Nivell de caiguda (decay)

Un últim truc és que tot i que la opció `decay_level:`està predeterminada a tindre el mateix valor que `sustain_level:` podeu assignar-los valors diferents per al control complet sobre l'envolupant. Això permet crear envolupants com ara:

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

![ASR envelope](../../../etc/doc/images/tutorial/env-decay-level.png)

També és possible definir el nivell `decay_level:` més alt que el `sustan_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
```

![ASR envelope](../../../etc/doc/images/tutorial/env-decay-level-2.png)

## Envolupants ADSR

En resum, les envolupants ADSR de Sonic Pi tenen les fases següents:

1. *atac (attack)*: temps que tarda l'amplitud en pasar de 0 a l'`atack_level`,
2. *caiguda (decay)*: temps per que tarda l'amplitud en passar de l'`attack_level` fins al `decay_level`,
3. *manteniment (sustain)* - temps que tarda l'amplitud en passar del `decay_level` al `sustain_level`,
4. *extinció (release)* - temps que tarda l'amplitud en passar del `sustain_level` a 0

És important tenir en compte que la durada d’un so és la suma dels temps de cadascuna d’aquestes fases. Per tant, el so següent tindrà una durada de 0,5 + 1 + 2 + 0,5 = 4 pulsacions:

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

Ara jugueu afegint envolupants als vostres sons...
