Bisher haben wir in diesem Abschnitt behandelt, wie wir mehrere Audio-Streams in Sonic Pi einbinden können - entweder durch den :sound_in
-Synth oder über das mächtige ` live_audio-System. Über die Arbeit mit mehreren Audio-Streams aus Eingangssignalen hinaus, kann Sonic Pi ebenso mehrere Audio-Streams als Ausgangssignal ausgeben. Dies wird über den
:sound_out`-Effekt erreicht.
Lass uns kurz rekapitulieren, wie Sonic Pis Synths und Effekte ihr Audio-Signal an ihren gegenwärtigen Effekt-Kontext übergeben. Stell dir zum Beispiel Folgendes vor:
with_fx :reverb do # C
with_fx :echo do # B
sample :bd_haus # A
end
end
Der einfachste Weg, um zu verstehen, was mit dem Audio-Stream passiert, ist beim innersten Audio-Kontext zu starten und uns langsam den Weg nach draußen entlang zu arbeiten. In diesem Fall ist der innerste Kontext mit A
bezeichnet und ist das :bd_haus
-Sample, das getriggert wird. Der Audio-Stream hiervon geht direkt in den Kontext B
, welches der :echo
-Effekt ist. Dieser fügt Echo dem eingehenden Audio-Stream hinzu und gibt es an seinen Kontext weiter - das ist C
- der :reverb
-Effekt. Dieser fügt dann Hall dem eingehenden Audio-Stream hinzu und gibt ihn an seinen Kontext weiter, welcher die oberste Ebene ist - der linke und rechte Lautsprecher (was in deinem Audio-Interface Ausgang 1 und Ausgang 2 entspricht). Der Klang fließt nach draußen den ganzen Weg hindurch als Stereo-Signal.
Das oben genannte Verhalten trifft auf alle Synths zu (einschließlich live_audio
) und auf den Großteil der Effekte, mit Ausnahme von :sound_out
. Der :sound_out
-Effekt tut zwei Dinge. Erstens gibt er seinen Audio-Stream wie oben beschrieben an seinen äußeren Kontext weiter. Zum Zweiten gibt er ihn auch an einen Ausgang deines Audio-Interface oder deiner Sound-Karte aus. Sehen wir uns das an:
with_fx :reverb do # C
with_fx :sound_out, output: 3 do # B
sample :bd_haus # A
end
end
In diesem Besipiel gibt unser bd_haus
-Sample sein Audio an seinen äußeren Kontext, welches der :sound_out
-Effekt ist. Dieser seinerseits gibt sein Audio an seinen externen Kontext, den :reverb
-Effekt weiter (wie erwartet). Allerdings gibt er auch einen Mono-Mix an den Ausgang 3 des Audio-Interface oder der Sound-Karte des Systems. Der Audio-Stream, wie er innerhalb von :sound_out
generiert wird hat also zwei Ziele, den :reverb
-Effekt und den Audio-Ausgang 3.
Wie wir gesehen haben, gibt der :sound_out
-Effekt standardmäßig einen Mono-Mix des Stereo-Streams an einen bestimmten Kanal aus, zusätzlich dazu, dass er ihn (wie erwartet) an seinen äußeren Kontext weiter gibt. Wenn ein Mono-Mix nicht gerade das ist, was du nach draußen geben willst, hast du eine Reihe von Optionen. Zum Ersten, bei Verwendung der mode:
-Option kannst du wählen nur den linken oder den rechten Kanal des Stereo-Streams an das Audio-Interface auszugeben. Oder du kannst den :sound_out_stereo
-Effekt verwenden, um zwei aufeinanderfolgende Ausgänge des Audio-Interface zu verwenden. Wirf einen Blick in die Dokumentation der Funktion für weitere Informationen und Beispiele.
Wie wir auch gesehen haben, ist es das standardmäßige Verhalten von :sound_out
und :sound_out_stereo
Audio sowohl an ihren äußeren Kontext (wie für alle Effekte typisch) als auch an den von dir bestimmten Audio-Ausgang deiner Sound-Karte zu schicken. Trotzdem wirst du gelegentlich vielleicht wünschen einen Audio-Stream ausschließlich an den Ausgang deiner Sound-Karte zu schicken und nicht an den äußeren Kontext (und daher deinen Audio-Stream auch nicht gemischt durch die Standard-Ausgänge 1 und 2 geschickt zu bekommen). Das ist möglich, indem du die Standard-Effekt-Option amp:
benutzt, die den Audio-Stream bearbeitet, nachdem der Effekt den Audio-Stream bearbeitet hat:
with_fx :sound_out, output: 3, amp: 0 do # B
sample :loop_amen # A
end
Im obigen Beispiel, wird das :loop_amen
-Sample an seinen äußeren Kontext geschickt, den :sound_out
-Effekt. Dieser sendet einen Mono-Mix and den Sound-Karten-Ausgang 3 und multipliziert danach den Audio-Stream mit 0, was diesen essentiell stumm schaltet. Dieses stummgeschaltete Signal wird anschließend an den äußeren Kontext des :sound_out
-Effektes geschickt, welches der Standard-Ausgang ist. Daher werden bei diesem Code die Standard-Ausgangskanäle kein hörbares Signal erhalten, und an Ausgang 3 wird ein Mono-Mix des Amen-Drum-Break geschickt.