Listing 10
with_fx :reverb do live_audio :rein end
Sehr viel interessanter erscheint die Möglichkeit, den Audioeingang nicht dauerhaft zu öffnen, sondern nur für einen definierten Zeitraum. Das gelingt mittels des Synth :audio_in. Statt wie andere Synths ein Signal zu generieren, liefert :audio_in das externe Signal.
Das Steuern von Dauer und Lautstärkeverlauf übernehmen die üblichen Synth-Optionen wie attack, sustain und release. Listing 11 legt auf diese Weise eine Lautstärkemodulation auf das Signal – so könnten Sie Dubstep-artige Wobble-Bässe erzeugen.
Listing 11
use_synth :sound_in
live_loop :hacker do
play 0,
attack: 0.1,
sustain: 0,
release: 0.1
sleep 0.2
end
Resampling
Schon in sehr frühen Versionen konnte Sonic Pi mittels des Record-Knopfes oben links Dateien im WAV-Format aufnehmen. Seit Version 3.0 funktioniert das auch per Codebefehl. In der ersten Zeile von Listing 12 legt die Funktion buffer einen Audiopuffer mit einer Dauer von vier Schlägen an und speichert unter dem Namen b eine Referenz darauf.
Das Argument :rec legt den Dateinamen fest, unter dem Sonic Pi die Aufnahme ablegt. Die Aufnahme selbst erledigt der Effekt record, die Option buffer verweist auf b (dritte Zeile). Im zum Effekt gehörigen Block spielt play eine vier Schläge lange Note (vierte Zeile).
Der Speicherort der auf diese Weise aufgenommenen Dateien verbirgt sich tief im Verzeichnisbaum. Sie finden die Datei mit einem vier Sekunden langen Sinusklang in diesem Fall unter /home/pi/.sonic-pi/store/default/cached_samples/rec.wav. Die dort gespeicherten Klänge lassen sich wie üblich per Pfadangabe auch abspielen.
Listing 12
b = buffer :rec, 4 with_fx :record, buffer: b do play 50, release: 4 end
Sample-Bibliothek
Listing 13 zeigt, wie Sie mittels der eben demonstrierten Aufnahmefunktion automatisiert Klangbibliotheken erstellen. Die erste Zeile übergibt nacheinander die ganzen Zahlen von 36 bis 60 unter dem Namen note an den folgenden Block.
Dort baut Zeile 2 aus dem Wert von note ein Symbol, das später als Dateiname fungiert. Hat note den Wert 36, dann lautet der entsprechende Dateiname s beispielsweise :sin36. Die Zeilen 4 bis 7 erledigen wie gehabt die Aufnahme.
Im Ergebnis liegen nach dem Programmlauf im Verzeichnis cached_samples/ 24 Audiodateien mit einer Dauer von jeweils einer Sekunde, die die Noten von C1 bis C3 enthalten.
Listing 13
(36..60).each do |note|
s = ("sin" + note.to_s).to_sym
b = buffer s, 1
with_fx :record, buffer: b do
play note
sleep 1
end
end
Wermutstropfen
Die Suche nach den passenden Jack-Optionen für das vorgestellte Setup erwies sich als durchaus zermürbende Angelegenheit. Davor war der Audio-Server häufig unter nicht reproduzierbaren Bedingungen abgeschmiert, teilweise erst nach mehreren Stunden Betrieb. Insofern können wir den Einsatz unter Live-Bedingungen aktuell nur bedingt empfehlen, ausgiebige Tests sind in jedem Fall notwendig.





