# Czas trwania obwiedni dźwięku

W poprzedniej sekcji zobaczyliśmy, w jaki sposób możemy używać polecenia `sleep`, aby kontrolować, kiedy dźwięki zaczynają grać. Nie wiemy jednak jeszcze, w jaki sposób kontrolować długość ich trwania.

Aby móc korzystać z prostej, ale jakże potężnej możliwości kontrolowania długości trwania naszych dźwięków, Sonic Pi udostępnia pojęcie obwiedni dźwięku dla amplitudy ADSR (czym jest ADSR dowiesz się za chwilę w kolejnych sekcjach tego rozdziału). Obwiednia amplitudy udostępnia dwa przydatne aspekty kontroli:

- kontrolę nad długością trwania dźwięku
- kontrolę poziomu głośności (amplitudy) dźwięku

## Długość trwania dźwięku (ang. Duration)

Długość trwania mówi o tym, jak długo słychać dany dźwięk. Im długość trwania jest większa, tym dłużej słyszysz dźwięk. Wszystkie dźwięki w Sonic Pi posiadają kontrolowalną obwiednię amplitudy, a całkowita długości trwania tej obwiedni to długość trwania dźwięku. Dlatego też kontrolując obwiednię, kontrolujesz długość trwania całego dźwięku.

## Amplituda

Obwiednia ADSR kontroluje nie tylko długość trwania, lecz pozwala Ci również na precyzyjną kontrolę amplitudy dźwięku. Wszystkie dźwięki zaczynają się i kończą ciszą. Pomiędzy tymi ciszami jest moment, podczas którego słychać dźwięk. Obwiednie pozwalają Ci przesuwać i kontrolować głośność tej części, w której go słychać. Jest to analogiczne do sytuacji, w której powiedziałbyś komuś, kiedy powinien zwiększać i zmniejszać głośność wzmacniacza gitarowego. Na przykład - możesz poprosić kogoś “zacznij od ciszy, potem powoli zwiększaj poziom głośności, utrzymaj go na tym poziomie przez chwilę, po czym szybko wycisz”. Sonic Pi pozwala Ci na zaprogramowanie tego za pomocą obwiedni.

Jak widzieliśmy już w poprzedniej sekcji samouczka, amplituda o wartości 0 to cisza, natomiast amplituda o wartości 1 to głośność normalna.

A teraz przyjrzyjmy się kolejno każdej ze składowych obwiedni.

## Faza zanikania (z ang. Release Phase)

Jedyną częścią obwiedni dźwięku, która jest domyślnie używana, to faza zwolnienia (release). Odpowiada ona za czas, podczas którego następuje wyciszenie dźwięku. Domyślnie wszystkie syntezatory posiadają czas zanikania amplitudy równy 1. Oznacza to, że trwa to 1 uderzenie (przy domyślnej wartości BPM jest to 1 sekunda):

    play 70

Nuta będzie odtwarzana przez 1 sekundę. Weź do ręki stoper i sprawdź :-). Jest to skrót dla dłuższej, bardziej dokładnej wersji:

    play 70, release: 1

Zauważ, że brzmienie jest dokładnie takie samo (dźwięk trwa przez jedną sekundę). Jednakże teraz bardzo łatwo możemy zmienić czas trwania przez zmianę wartości opcji `release`:

    play 60, release: 2

Możemy też sprawić, aby syntezator brzmiał przez bardzo krótką chwilę. Wystarczy użyć bardzo małej wartości dla czasu zanikania amplitudy:

    play 60, release: 0.2

Czas, podczas którego zmniejsza się głośność dźwięku, to tak zwana faza zanikania (ang. release phase) i domyślnie jest to przejście liniowe (tzn. obniżające się w linii prostej). Poniższy diagram ilustruje je:

Pionowa linia po lewej stronie diagramu pokazuje, że dźwięk zaczyna się z amplitudą równą 0, ale momentalnie osiąga pełną głośność (jest to faza narastania, omówimy ją za chwilę). Gdy pełna głośność zostanie już osiągnięta, następuje liniowe jej zmniejszanie, aż do zera. Zajmuje to tyle czasu, ile zostało ustawione za pomocą opcji zanikania `release:`. Im czas zanikania jest dłuższy, tym dłuższy będzie czas wybrzmiewania dźwięku syntezatora.

Możesz zatem zmieniać długość trwania Twoich dźwięków, zmieniając czas trwania fazy zanikania. Spróbuj teraz pobawić się, dodając do Twojej muzyki różne czasy dla fazy zanikania.

## Faza narastania (z ang. Attack Phase)

Domyślnie faza ataku jest równa 0 dla wszystkich syntezatorów. Oznacza to, że przejście od amplitudy 0 do amplitudy 1 jest natychmiastowe. Nadaje to syntezatorowi perkusyjne brzmienie na początku. Mimo to może się zdarzyć, że będziesz chciał, aby Twój dźwięk zaczynał brzmieć stopniowo. Aby to zrobić, wystarczy wykorzystać opcję ‘attack:’. Spróbuj użyć takiego stopniowego wejścia w kilku różnych dźwiękach:

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

Zauważ, że możesz używać wielu opcji w tym samym czasie. Na przykład dla krótkiej fazy ataku i długiej fazy zanikania spróbuj napisać i uruchomić coś takiego:

    play 60, attack: 0.7, release: 4

Taka obwiednia z krótką fazą ataku i długą zanikania została zilustrowana na poniższym rysunku:

Oczywiście możesz zmieniać opcje według swoich upodobań. Spróbuj teraz długiej fazy ataku i krótkiej fazy zanikania:

    play 60, attack: 4, release: 0.7

Na koniec możesz też spróbować ustawić obie wartości dla czasu narastania i zanikania na małe wartości, aby uzyskać krótsze dźwięki.

    play 60, attack: 0.5, release: 0.5

## Faza podtrzymania (z ang. Sustain Phase)

Oprócz możliwości ustawiania czasu narastania i czasu zanikania dźwięku, możesz również kontrolować fazę podtrzymania (z ang. Sustain Phase). Jest to moment, w którym dźwięk jest utrzymany na pełnej amplitudzie pomiędzy fazami narastania i zanikania.

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

Czas podtrzymania (ang. sustain) jest bardzo przydatny dla ważnych dźwięków, którym chciałbyś dać pełną obecność w miksie tuż przed wejściem w opcjonalną fazę zanikania. Oczywiście całkowicie dopuszczalne jest ustawienie obu opcji, zarówno fazy ataku jak i fazy zanikania na wartość 0, a także użycie tylko fazy podtrzymania, żeby nie mieć absolutnie żadnej fazy wejścia lub wyjścia dla danego dźwięku. Bądź jednak ostrożny i wiedz, że ustawienie fazy zanikania na 0 może spowodować dziwne kliki w dźwiękach i bardzo często zamiast tego dużo lepiej jest użyć bardzo małej wartości, np. 0.2.

## Faza opadania (z ang. Decay Phase)

Na sam koniec: dla momentów, gdzie potrzebujesz dodatkowego poziomu kontroli, masz możliwość skorzystania z fazy opadania (ang. decay). Jest to taki moment obwiedni dźwięku, który znajduje się pomiędzy fazą ataku a fazą podtrzymania i określa moment, w którym amplituda spada z poziomu ataku `attack_level` do poziomu podtrzymania `sustain_level`. Domyślnym argumentem dla fazy opadania jest 0, natomiast poziomy ataku i podtrzymania posiadają domyślną wartość 1. W związku z tym musisz określić dla nich czas opadania, aby uzyskać jakikolwiek efekt:

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

## Poziom opadania

Ostatnia sztuczka polega na tym, że pomimo iż domyślna wartość opcji `decay_level:` jest taka sama jak wartość opcji `sustain_level:`, to możesz bezpośrednio zmienić jej wartość, aby mieć pełną kontrolę nad całą obwiednią dźwięku. Pozwala Ci to na tworzenie obwiedni takich, jak poniższa:

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

Jest również możliwe ustawienie opcji `decay_level:` na wartość wyższą niż poziom `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

## Obwiednia dźwięku ADSR

Podsumowując, obwiednia dźwięku ADSR w Sonic Pi posiada następujące fazy:

1. attack - czas narastania amplitudy od wartości 0 do poziomu maksymalnego, którego wysokość jest określana przez opcję `attack_level`,
2. decay - czas opadania amplitudy od poziomu maksymalnego (`attack_level`) do poziomu opadania (`decay_level`),
3. sustain - czas, który jest potrzebny, żeby zmienić poziom głośności dźwięku od wartości określonej przez opcję `decay_level` do wartości określonej przez opcję `sustain_level`,
4. release - czas zanikania amplitudy od poziomu podtrzymania (`sustain_level`) do wartości 0

Należy tu zwrócić uwagę na fakt, że całkowita długość trwania dźwięku jest sumą czasu trwania każdej z faz ustawionych na danym dźwięku. Dlatego też poniższy dźwięk będzie miał długość 0.5 + 1 + 2 + 0.5 = 4 uderzeń:

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

Tyle teorii, teraz zabaw się i spróbuj dodać różne obwiednie dźwięku do Twoich melodii…