Dauer und Hüllkurven

Wie wir schon vorher gesehen haben, können wir mit dem sleep-Kommando steuern, wann ein Klang zu spielen anfängt. Bislang konnten wir aber noch nicht die Dauer eines Klangs steuern.

Um die Dauer von Klängen auf einfache, aber tiefgehende Weise zu beeinflussen, bietet Sonic Pi das Prinzip der ADSR-Hüllkurve. (Der englische Begriff für Hüllkurve heißt Envelope, wir werden später sehen, was ADSR genau bedeutet). Eine Hüllkurve hat zwei praktische Eigenschaften:

Dauer

Die Dauer bestimmt, wie lange ein Klang klingt. Eine längere Dauer bedeutet, dass Du den Klang länger hören kannst. Alle Klänge in Sonic Pi haben eine Hüllkurve, die beeinflusst werden kann, und die gesamte Dauer dieser Hüllkurve bestimmt die Dauer des Klangs. Deshalb kann man über die Kontrolle der Hüllkurve die Dauer des Klangs beeinflussen.

Amplitude

Die ADSR-Hüllkurve kontrolliert nicht nur die Dauer, sondern ermöglicht Dir auch die genaue Kontrolle über die Amplitude eines Klangs. Alle Klänge beginnen und enden mit Stille; dazwischen ist irgendetwas hörbar. Hüllkurven erlauben Dir, die Amplitude der hörbaren Anteile des Klanges zu verschieben, zu verlängern und zu verkürzen. Es ist so, als würdest Du jemanden sagen, wie er die Lautstärke einer Musik lauter und leiser drehen soll. Du könntest denjenigen z.B. bitten: “Fang bitte mit einer Stille an, dreh dann die Lautstärke langsam bis zum Anschlag hoch, lass es eine Weile so und blende dann schnell runter, bis man nichts mehr hört”. Genau dafür sind in Sonic Pi die Hüllkurven da.

Wie wir vorher schon gesehen haben, bedeutet eine Amplitude von 0 Stille und eine Amplitude von 1 entspricht der normalen Lautstärke.

Jetzt wollen wir uns alle Teile einer Hüllkurve einmal ansehen.

Release-Zeit

Wenn man Sonic Pi nichts anderes sagt, verwendet jeder Synth eine sehr einfache Hüllkurve mit einer Release-Zeit von 1. Solange dauert es, bis der Synth ausklingt - eine Schlagzeit (was beim BPM-Wert 60 genau 1 Sekunde entspricht):

play 70

Diesen Ton wirst Du 1 Sekunde lang hören. Los, stopp die Zeit. :-) Es bedeutet das gleiche für diese etwas längere, ausführliche Variante:

play 70, release: 1

Du hast gemerkt, dass dieser Ton genau gleich klang (der Klang war eine Sekunden lang zu hören). Aber jetzt kannst Du sehr einfach die Dauer über die release:-Opt verändern:

play 60, release: 2

Mit einer sehr kurzen Release-Zeit wird der Synth-Klang sehr kurz:

play 60, release: 0.2

Die Dauer des Ausklingens eines Klangs nennt sich Release-Phase. Normalerweise ist das ein lineares Ausklingen (also eine gerade Linie), wie das folgende Diagramm zeigt:

release envelope

Die senkrechte Linie ganz links im Bild zeigt, dass der Klang mit einer Amplitude von 0 startet, jedoch sofort auf die volle Höhe geht (das ist die Attack-Phase, die wir gleich ansehen werden). Wenn die volle Höhe erreicht ist, geht die Amplitude in einer geraden Linie bis auf Null zurück, wobei dies so lange dauert, wie es mit release festgelegt wurde. Je länger die Release-Zeit eines Synth, desto länger klingt dieser aus.

Deshalb kannst Du mit der Release-Zeit die Länge eines Klangs ändern. Spiele einmal mit unterschiedlichen Release-Zeiten herum.

Attack-Zeit

Normalerweise ist die Attack-Phase für alle Synths 0, die Amplitude geht also sofort von 0 auf 1 hoch. Dies gibt dem Synth einen perkussiven Klang. Vielleicht möchtest Du den Klang jedoch einblenden. Dies kannst Du mit der attack-Opt erreichen. Blende einige Klänge ein:

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

Du kannst mehrere Opts zur selben Zeit anwenden. Zum Beispiel für eine kurze Attack- und eine lange Release-Zeit:

play 60, attack: 0.7, release: 4

Diese Hüllkurve mit einem kurzen Attack und langem Release sieht so aus:

attack release envelope

Oder mal andersherum: Versuche einen langen Attack und einen kurzen Release:

play 60, attack: 4, release: 0.7

long attack short release envelope

Schließlich kannst Du auch einen kurzen Attack und Release für kürzere Klänge verwenden.

play 60, attack: 0.5, release: 0.5

short attack short release envelope

Sustain-Zeit

Zusätzlich zu den Attack- und Release-Zeiten kannst Du auch die Sustain-Zeit bestimmen. Das ist die Zeitdauer, die der Klang anhält, wenn er die eingestellte Lautstärke erreicht hat, also zwischen dem Attack- und dem Release-Stadium.

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

ASR envelope

Mit der Sustain-Zeit kannst Du wichtige Klänge in einem Mix hervorheben, bevor möglicherweise der Release einsetzt. Natürlich kann man ohne weiteres sowohl den attack: als auch den release: auf 0 setzen und nur den Sustain gebrauchen. Damit bekommt man einen Klang ohne Ein- und Ausblendung. Aber Vorsicht, ein Release von 0 kann Klickgeräusche in der Aufnahme verursachen. Meist ist ein geringer Wert wie z.B. 0.2 besser.

Decay-Zeit

Und falls Du alles ganz genau beeinflussen möchtest, kannst Du noch die Decay-Zeit festlegen. Das ist die Phase der Hüllkurve, die zwischen die Attack- und die Release-Phase passt; sie gibt die Zeit an, wo die Amplitude hinunterfällt vom attack_level: zum decay_level: (welche den gleichen Wert wie sustain_level: erhält, wenn Du es nicht anders vorgibst). Normalerweise steht die Opt decay: auf 0, während sowohl das Attack- als auch das Sustain-Level auf 1 stehen. Damit die Decay-Zeit einen hörbaren Effekt hat, müssen Attack und Sustain also auch angegeben werden:

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

ADSR envelope

Decay-Level

Normalerweise hat die Option decay_level: den selben Wert wie sustain_level:, aber Du kannst sie auch bewusst einen anderen Wert setzen. So hast Du volle Kontrolle über die Hüllkurve und kannst zum Beispiel eine wie diese vorgeben:

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

Ebenso ist für decay_level: ein höherer Wert als sustain_level: möglich:

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

ADSR-Hüllkurven

Fassen wir noch einmal zusammen: Die ADSR-Hüllkurven von Sonic Pi bestehen aus den folgenden Phasen:

  1. Attack - die Zeit, welche die Amplitude von 0 bis zum attack_level benötigt,
  2. Decay - die Zeit, in der die Amplitude vom attack_level zum sustain_level übergeht,
  3. Sustain - die Zeit, in der sich die Amplitude auf dem sustain_level hält,
  4. Release - die Zeit, welche die Amplitude vom sustain_level auf 0 bringt

Eins ist wichtig: der Klang dauert so lange wie die Summe aller Zeiten der unterschiedlichen Phasen. Deshalb hat der folgende Klang eine Dauer von 0.5 + 1 + 2 + 0.5 = 4 Schlägen:

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

Jetzt weißt Du, wie Du Deine Klänge mit Hüllkurven verändern kannst…