Aus Raspberry Pi Geek 12/2018

Audio-Programmierung mit Sonic Pi, Teil 1 (Seite 3)

Listing 3

 

live_loop :knarzer do
  sample :bass_dnb_f, rate: 0.5
  sleep 4
end
live_loop :der_beat do
  sample :loop_amen, beat_stretch: 2
  sleep 2
end

Klangsynthese

Sonic Pi kann nicht nur gespeicherte Klänge abspielen, sondern auch Klänge in Echtzeit berechnen. Dazu dient die Funktion play, die als Argument die im MIDI-Format kodierte Tonhöhe erwartet. Jede ganze Zahl steht für einen Halbton, beginnend bei 0 für ein mit rund 8 Hz sehr tiefes, nicht hörbares C.

Eine Tabelle mit den Zuordnungen zwischen MIDI-Nummer, Notenname und Frequenz finden Sie im MIDI-Kompendium des ZeM College [2]. Neben Ganz- sind auch Dezimalzahlen zulässig; eine Übersetzung zwischen MIDI und Frequenz im Code erledigen die Funktionen midi_to_hz und hz_to_midi.

Die Anweisung play 60 spielt ein eingestrichenes C. Wer eine musikalische Ausbildung hat, kann auch Notennamensymbole wie :C4 oder :G# verwenden – mehr dazu steht im eingebauten Tutorial unter 2.1.

Auch play bietet viele Optionen. Mit release können Sie die Ausklingzeit der Note ändern. Die Dauer geben Sie – wie bei allen zeitabhängigen Aktionen – in Schlägen an. Per Voreinstellung klingt eine Note einen Schlag lang aus. Mit einem sehr viel kleineren Wert für release erzeugen Sie einen perkussiven, klopfenden Klang (Listing 4, erste Zeile). Die Option attack steuert die Einklingzeit. Sie liegt voreingestellt bei 0, der Klang ist sofort da. Ein hoher Wert für attack lässt den Klang langsam anschwellen (zweite Zeile).

Listing 4

 

play 60, release: 0.05
play 60, attack: 2

Der voreingestellte Synthesizer liefert einen reinen Sinusklang. Mit use_synth wählen Sie einen anderen Klangerzeuger aus. Ähnlich wie bei der Funktion sample öffnet sich beim Tippen eine Auswahlliste mit allen verfügbaren Synths. In der eingebauten Hilfe finden Sie unter Synths auch eine Beschreibung der jeweiligen Optionen und deren Voreinstellungen.

In Listing 5 wählt die erste Zeile den Synth :blade aus, einen elektronischen Flächenklang mit Vibrato, also einer periodischen Modulation der Tonhöhe. Die Option vibrato_rate steuert das Vibrato-Intervall. Sie geben es als Wiederholungen pro Schlag an (Voreinstellung *6). Ein vibrato_rate: 1 sorgt für eine hörbar leiernde Tonhöhe. Da die Optionen für Ausklingzeit und Vibrato für jede der vier Noten gelten soll, setzen wir diese in Zeile 2 mit use_synth_defaults.

Listing 5

 

use_synth :blade
use_synth_defaults release: 4, vibrato_rate: 1
play 40
sleep 2
play 44
sleep 2
play 48
sleep 2
play 52

Wie bei allen Funktionen, deren Name mit use_ beginnt, gelten die mit use_synth und use_synth_defaults festgelegten Werte nur im jeweiligen Thread. Sie können also in separaten Live Loops unterschiedliche Synths und Parameter festlegen. Jede Festlegung per use_ gilt so lange, bis ein anderer Befehl gleicher Art sie aufhebt.

Effekte

Mit der Funktion with_fx schicken Sie den in einem Codeblock erzeugten Klang durch einen Effekt wie Echo, Hall, Flanger oder Verzerrer. Wie gehabt liefert beim Tippen eine Auswahlliste alle verfügbaren Effekte; ein eigener Bereich im Hilfefenster gibt Auskunft über die jeweiligen, vom Effekttyp abhängigen Optionen.

Der Code aus den ersten sechs Zeilen von Listing 6 schickt eine aufsteigende Tonfolge durch einen Verzerrer und reichert den etwas langweiligen Sinusklang mit Obertönen an. Die Option distort erwartet Werte von 0 bis 1 und steuert die Intensität der Verzerrung.

Sie sehen hier auch, dass Blöcke wiederum Blöcke enthalten dürfen. Das lässt sich beliebig fortführen, wie ab Zeile 7 zu sehen: Das Ausgangssignal des Verzerrers geht in einen weiteren Effekt, einen Hall. Die Option room steuert mit Werten zwischen 0 und 1 die Größe des simulierten Raums.

Listing 6

 

with_fx :distortion, distort: 0.9 do
  16.times do |i|
    play 30 + i , release: 0.1
    sleep 0.25
  end
end
with_fx :reverb, room: 1 do
  with_fx :distortion, distort: 0.9 do
    16.times do |i|
      play 30 + i , release: 0.1
      sleep 0.25
    end
  end
end
DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 6 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben