# Geluidsduur met “Envelopes”

In een eerdere sectie, hebben we gezien hoe we de opdracht `sleep` konden gebruiken om te bepalen wanneer we onze geluiden activeren. We zijn echter nog niet in staat geweest om te bepalen hoe lang ons geluid duurt.

Om ons een eenvoudig maar krachtig middel te geven waarmee we de controle hebben over de tijdsduur van onze geluiden, biedt Sonic Pi ons een manier om een zogenaamde ADSR amplitude envelope (we bespreken later in deze sectie wat dat betekent) te beschrijven. Een amplitude “envelope” biedt twee manieren van controle:

- controle over de duurtijd van een geluid
- controle over de amplitude van een geluid

## Duurtijd

De duurtijd is de lengte dat een klank aanhoud. Een langere duur betekent dat je de klank langer hoort. De geluiden van Sonic Pi hebben allen een instelbare amplitude envelop, de totale duur van die envelop is dan de totale duurtijd van dat geluid. Zodoende kun je, door het instellen van de envelop, de duurtijd bepalen.

## Amplitude

De ADSR envelop regelt niet alleen de duurtijd, het geeft je ook een fijnregeling van de geluidssterkte van het geluid. Alle hoorbare geluiden beginnen en eindigen onhoorbaar met daartussen luidere en minder luide stukken. De ASDR envelop staat je toe om de geluidssterkte van de hoorbare gedeelten van een geluid te verschuiven en vast te houden. Zoals je iemand instructies zou geven aan het volume van een gitaarversterker en deze van stil, naar langzaam omhoog tot het hoogste volume en deze even aan te laten houden, om deze dan, snel of traag, terug naar stil te brengen. Door de envelop kan je dit gedrag in Sonic Pi programmeren.

Even herhalen, zoals we eerder hebben gezien, staat een amplitude van 0 voor stilte en een amplitude van 1 voor het normale volume.

Laten we nu eens kijken naar elk afzonderlijk onderdeel van de envelop.

## Release fase

Het enige deel van de envelop dat standaard wordt gebruikt is de release tijd. Dit is de tijd die nodig is om het geluid van een synth te reduceren tot stilte. Alle synths hebben een release tijd van 1, wat betekent dat ze standaard een duur van 1 beat hebben (en dus op onze standaard 60 BPM, 1 seconde lang is):

    play 70

De noot zal 1 seconde lang hoorbaar zijn. Controleer het maar met je stopwatch :-) Dit is de verkorting voor het langere, meer expliciete:

    play 70, release: 1

Merk op dat deze exact hetzelfde klinkt (de klank duurt één seconde). Het is dus heel makkelijk om de duurtijd in te stellen door de waarde van de `release:` optie te veranderen:

    play 60, release: 2

We kunnen de synth een heel kort laten klinken door een heel kleine release tijd te gebruiken:

    play 60, release: 0.2

De duur van het “vrijlaten” van het geluid noemen we de release fase en staat standaard ingesteld op een “lineair” verloop ingesteld (d.w.z. in een rechte lijn). Het volgende diagram illustreert deze overgang:

De verticale lijn aan de linkerkant van het diagram toont ons dat het geluid bij geluidssterkte 0 begint en onmiddellijk naar volledige sterkte klimt (dit is de aanslag fase, die gaan we hierna bespreken). Zodra het geluid op volle sterkte is zal de sterkte in een rechte lijn naar nul zakken. In de tijdsduur die is aangegeven met `release:`. Langere release tijden leveren een langer verloop, waarmee het geluid van de synth uitvaagt, op.

Je kan dus de duurtijd van je klank veranderen aan de hand van de `release:` tijd. Speel hier even mee, door `release:` tijden toe te voegen aan je geluiden.

## Aanslag fase (de Attack)

De aanslag fase is voor alle synths standaard ingesteld op 0, wat betekend dat deze qua sterkte onmiddellijk van 0 naar 1 gaat. Dit geeft aan de synth een korte hevige klank zoals bij een percussie-instrument. Maar misschien wil je je geluid zachtjes luider laten worden. Dit kunnen we bereiken met de `attack:` optie. Probeer nu eens je geluiden te laten aanzwellen:

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

Je kan meerdere opties tegelijk gebruiken. Probeer deze bijvoorbeeld eens voor een kortere aanslag met een langere uitloop:

    play 60, attack: 0.7, release: 4

Deze korte `attack:` en lange `release:` envelop zie je in het volgende diagram afgebeeld:

Natuurlijk, kan je de dingen omdraaien. Probeer eens een lange attack en een korte release:

    play 60, attack: 4, release: 0.7

Als laastste, kan je natuurlijk ook korte attack en release tijden instellen voor korte geluiden.

    play 60, attack: 0.5, release: 0.5

## Sustain fase

Naast het opgeven van attack en release tijden, u kunt ook een sustain-tijd opgeven om de sustain fase in te stellen. Dit is de tijd dat het geluid bij een volledige amplitude tussen de attack en de release fase wordt aangehouden.

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

De sustain-tijd is nuttig voor de geluiden die je een volledige aanwezigheid in de mix wil geven voordat deze een optionele release fase ingaan. Natuurlijk, is het volkomen correct om zowel de `attack:` als de `release:` optie in te stellen op 0, om gewoon geen fade in- of fade out aan het geluid toe te voegen. Maar hier moet je mee opletten, een release van 0 kan klikjes in de audio produceren en het is vaak dan ook beter om dan een zeer kleine waarde te gebruiken zoals 0,2.

## Verval fase (Decay Phase)

Voor een nog beetje extra controle kun je ook de verval tijd instellen. Dit is de fase van de envelop die past tussen de attack en sustain fasen en de tijd aangeeft waarin de amplitude zal dalen van het `attack_level:` naar het `decay_level:` (die, tenzij u die expliciet instelt, op het `sustain_level:` gebracht zal worden). Standaard, is de `decay:` optie 0 en hebben zowel attack en sustain niveaus een waarde van 1, deze zal je dus moeten opgeven wil je dat de verval tijd effect heeft:

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

## Verval niveau (Decay level)

Eén laatste truc is dat, hoewel de `decay_level:` optie standaard dezelfde waarde heeft ingesteld als `sustain_level:`, je deze wel expliciet kan instellen op verschillende waarden voor een volledige controle over de envelop. Hierdoor kan je een envelop als deze maken:

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

Het is ook mogelijk om het `decay_level:` hoger in te stellen dan het `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

## ADSR Enveloppen

Dus samengevat , hebben Sonic Pi’s ADSR enveloppen de volgende fasen:

1. attack - tijd vanaf 0 amplitude naar `attack_level`,
2. decay - tijd om de amplitude van `attack_level` naar `decay_level` te brengen,
3. sustain - tijd om de amplitude van `decay_level` naar `sustain_level` te brengen,
4. release - tijd om de amplitude van `sustain_level` naar 0 te brengen

Het is belangrijk op te merken dat de duur van een geluid de som is van van de tijd van elk van deze fasen. Daarom zal het volgende geluid een duur van 0,5 + 1 + 2 + 0,5 = 4 beats hebben:

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

Ga hier nu maar mee spelen en voeg je eigen envelop aan jouw geluiden toe…