Aus Raspberry Pi Geek 12/2019

Audioprogrammierung mit Sonic Pi, Teil 5 (Seite 2)

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.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 4 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