# Varighed med envelopes

I et tidligere kapitel så vi hvordan vi kan bruge `sleep`-kommandoen til at bestemme hvornår vores lyde starter. Vi har dog endnu ikke kunnet styre varigheden af vores lyde.

For at tilbyde en simpel, men alligevel fleksibel måde at styre varigheden af vores lyde gør Sonic Pi brug af begrebet ADSR-amplitude-envelope. Vi vil komme tilbage til hvad ADSR dækker over, senere i dette kapitel. Envelope kaldes også lydens kontur på dansk. En amplitude-envelope, eller amplitude-kontur, giver os mulighed for at styre to nyttige aspekter af lyden:

- lydens varighed
- lydens amplitude

## Varighed

Varigheden bestemmer hvor længe lyden kan høres. En længere varighed betyder at du hører lyden i længere tid. Alle lydene i Sonic Pi har en amplitude-envelope som kan styres, og den totale varighed af denne envelope er varigheden af lyden. Ved at styre lydens envelope styrer du derfor dens varighed.

## Amplitude

En ADSR-envelope styrer ikke kun varighed, den giver dig også detaljeret styring over lydens amplitude. Alle hørbare lyde starter og slutter stille og indeholder en ikke-stille del derimellem. Envelopes giver dig mulighed for at skrue op for og holde amplituden af de ikke-stille dele af lyden. Det svarer til at give nogen instruktioner om hvordan der skal skrues op og ned for lyden på en guitar-forstærker. For eksempel kan du bede nogen om at “starte med stilhed, skrue langsomt op til fuld lydstyrke, holde niveauet lidt tid og så hurtigt skrue ned til stilhed”. Sonic Pi giver dig mulighed for at programmere præcis denne opførsel med envelopes.

For at opsummere: Som vi har været inde på tidligere, betyder en amplitude på 0 stilhed, mens en amplitude på 1 svarer til normal lydstyrke.

Lad os nu se på hver del af en envelope ad gangen.

## Release-fasen

Den eneste del af envelopen der som udgangspunkt bruges, er release-varigheden. Det er den tid det tager for synth-lyden at falme ud. Alle synths har en release-varighed på 1. Det betyder at de som udgangspunkt har en varighed på ét slag, som ved standard-BPM på 60 svarer til et sekund:

    play 70

Dennne tone vil kunne høres i et sekund. Prøv at tage tid :-) Du kan også skrive det mere eksplicit:

    play 70, release: 1

Bemærk at dette giver præcis samme resultat - lyden varer i et sekund. Men nu er det nemt at ændre varigheden ved at ændre på `release:`-parameteren:

    play 60, release: 2

Vi kan få synth’en til at spille i meget kort tid ved at bruge en meget kort release-varighed:

    play 60, release: 0.2

Den tid det tager lyden at falme ud, kaldes release-fasen og er som udgangspunkt en lineær overgang (dvs. en lige linje hvis man tegner den). Dette diagram illustrerer overgangen:

Den lodrette linje helt til venstre i diagrammet viser at lyden starter med amplitude 0, men straks går op til fuld amplitude. Det er attack-fasen som vi vil komme ind på om lidt. Når lyden er på fuld amplitude, vil den med konstant hastighed gå mod nul, og den vil tage den tid der er angivet som `release:`, for at nå nulpunktet. Længere release-varigheder gør at synths tager længere tid om at falme ud.

På den måde kan du ændre varigheden af dine lyde ved at ændre på `release:`-parameteren. Prøv at have lidt sjov med at tilføje release-varigheder til din musik.

## Attack-fasen

Som udgangspunkt er attack-fasen 0 for alle synths, hvilket betyder at de straks går fra amplitude 0 til 1. Det giver synth’en et indledende anslag. Det kan dog være at du ønsker at lade din lyd falme ind. Det kan du opnå med `attack:`-parameteren. Prøv det på nogle lyde:

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

Du kan sætte flere parametre ad gangen. Prøv for eksempel dette for et kort “attack” og en lang “release”:

    play 60, attack: 0.7, release: 4

Den tilsvarende envelope for det korte “attack” og den lange “release” er illustreret på det følgende diagram:

Du kan selvfølgelig også bytte rundt på tingene. Prøv et langt attack og en kort release:

    play 60, attack: 4, release: 0.7

Du kan også give korte varigheder både til attack og release. Det giver kortere lyde.

    play 60, attack: 0.5, release: 0.5

## Sustain-fasen

Ud over at angive attack- og release-varigheder kan du styre sustain-fasen som angiver en “bevarings-varighed”. Den bestemmer hvor længe lyden holdes på fuld amplitude mellem attack- og release-faserne.

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

Sustain-varigheden er nyttig til vigtige lyde som du ønsker at have fuldt til stede i mixet før de begynder på deres release-fase. Du kan selvfølgelig også sætte både `attack:` og `release:` til 0 og blot bruge `sustain:` for helt at undgå at lyden falmer ind eller ud. Men pas på - en release på 0 kan give uønskede kliklyde, så det er tit bedre at bruge en meget lille værdi såsom 0.2.

## Decay-fasen

For et ekstra niveau af kontol kan du også angive en henfalds-varighed: decay. Den bruges i decay-fasen, som er en fase i envelopen som sidder mellem attack- og sustain-faserne og angiver hvor længe amplituden er om at falde fra `attack_level:` (amplituden som attack-fasen slutter på) til `decay_level:` (amplituden som decay-fasen slutter på - og som, medmindre du har sat den til andet, får samme værdi som `sustain_level:`). Som udgangspunkt er `decay:`-parameteren 0, og både attack- og sustain-amplituderne er 1, så du er nødt til at angive dem for at decay-varigheden får en effekt:

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

## Decay-amplitude

Et sidste trick er at selvom `decay_level:`-parameteren, altså amplituden som decay-fasen slutter på, som udgangspunkt bliver sat til det samme som `sustain_level:`, så kan du sætte parametrene til forskellige værdier for at få fuld kontrol over envelopen. Det giver dig mulighed for at lave envelopes som den følgende:

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

Det er også muligt at sætte `decay_level:` højere end `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-envelopes

Lad os opsummere: ADSR-envelopes i Sonic Pi har følgende faser:

1. attack - tiden det tager at gå fra amplitude 0 til `attack_level`,
2. decay - tiden det tager at flytte amplituden fra `attack_level` til `decay_level`,
3. sustain - tiden det tager at flytte amplituden fra `decay_level` til `sustain_level`,
4. release - tiden det tager at flytte amplituden fra `sustain_level` til 0

Det er vigtigt at bemærke at lydens totale varighed er summen af varighederne af disse faser. Den følgende lyd vil derfor have en varighed på 0.5 + 1 + 2 + 0.5 = 4 slag:

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

Tag nu og leg med at føje envelopes til dine lyde…