Listing 4
event = sample :loop_amen, lpf: 60, lpf_slide: 1 control event, lpf: 100
Effekte
Neben Synths und Samples bietet Sonic Pi außerdem die Möglichkeit, Effekte zu modulieren. Wie gehabt finden Sie Informationen über die dafür zulässigen Parameter im Hilfebereich unter FX. Bei der Effektmodulation ist es ebenfalls nötig, eine Referenz auf den jeweiligen Effekt per Argument an die Funktion control zu übergeben. In diesem Fall handelt es sich dabei um ein Objekt der Klasse FXNode.
Zwar liefert ein Aufruf der Funktion with_fx ein solches Objekt. Das nützt aber nichts, da die Effektmodulation innerhalb des Blocks stattfindet, den Sie an with_fx übergeben. Die Lösung liegt darin, dass with_fx eine Referenz auf das FXNode-Objekt grundsätzlich in den zugehörigen Block schiebt.
Wenn Sie innerhalb des Blocks Zugriff auf den Effekt benötigen, können Sie die Referenz zu Beginn des Blocks abfangen und mit einem Variablennamen versehen, der dann im Block Gültigkeit hat. Das läuft ganz genauso wie mit Zählervariablen von times oder den Argumenten selbst geschriebener Funktionen.
In Listing 5 trägt der Verweis auf den Effekt innerhalb des Blocks den Namen fx und bildet dann wie gehabt ein Argument des control-Aufrufs. Im Ergebnis verkürzt sich die Laufzeit des Echoeffekts (decay) kontinuierlich vom voreingestellten Wert 0,25 auf 0,05 Schläge.
Listing 5
with_fx :echo, decay: 4, phase_slide: 2 do |fx| sample :elec_blip control fx, phase: 0.05 end
Listing 6 zeigt eine etwas komplexere Anwendung der Effektmodulation. In diesem Fall sind zwei Effekte im Spiel: Der mit fx1 referenzierte Effekt versieht den kompletten Loop tomita mit einem Hall. Jeder Durchlauf des Loops spielt einen Rechteckwellenpuls, der durch einen Echoeffekt (fx2) läuft.
Beide Effektreferenzen lassen sich im Block des inneren Effekts (Zeilen 6 bis 15) adressieren. Sowohl die Laufzeit des Echos als auch die Raumgröße (room) sowie der Effektanteil (mix) des Halls werden nun dynamisch und gleitend gesteuert.
Listing 6
use_synth :square
with_fx :reverb do |fx1|
live_loop :tomita do
with_fx :echo do |fx2|
play 40, release: 0.1
control fx2,
decay: 8,
phase_slide: 2,
phase: rand(0.5)
control fx1,
mix_slide: 2,
mix: rand(1),
room_slide: 2,
room: rand(1)
end
sleep 4
end
end
Die dynamische Steuerung von Effektparametern per control bringt unter Umständen Vorteile in Bezug auf die Leistung: Schicken Sie einen Live Loop durch einen Effekt, dann kostet das weniger Rechenleistung, als für jedes einzelne Klangereignis einen eigenen with_fx-Aufruf zu starten. Den Nachteil der ersten Lösung, die Starrheit der Parameter, fangen Sie mit dem in Listing 6 aufgezeigten Weg auf.
Fazit
Unsere Reihe rund um die professionelle Audioprogrammierung mit Sonic Pi endet mit diesem Beitrag. Die ursprünglich für Lehrzwecke angetretene Sprache hat sich mittlerweile zu einem Werkzeug entwickelt, das selbst professionelle Ansprüche bedient. Seine Herkunft als Mittel zu Lehrzwecken führt allerdings dazu, dass komplexere Aspekte der Sprache in Tutorials oft zu kurz kommen. Es war daher Ziel dieser Reihe, umfassend und gründlich alle Sprachmittel von Sonic Pi aufzuzeigen.
Der Autor
Der Medienkünstler Pit Noack ist Sonic-Pi-Nutzer der ersten Stunde. In Hannover gibt er im eigenen Atelier Programmierkurse für Laien und Profis zu Sonic Pi, Python und Processing.





