Tot nu toe hebben we gekeken naar hoe we meerdere geluiden Sonic Pi binnen krijgen - hetzij door gebruik te maken van :sound_in
dan wel via het krachtige live_audio
mechanisme. Naast omgaan met meerdere binnenkomende kanalen kan Sonic Pi ook meerdere uitgaande kanalen afhandelen. Dit word bereikt met het :sound_out
effect.
Laten we snel even herhalen hoe Sonic Pi’s synths en effecten hun geluid in de huidige effecten context krijgen. Kijk bijvoorbeeld eens naar het volgende:
with_fx :reverb do # C
with_fx :echo do # B
sample :bd_haus # A
end
end
De eenvoudigste manier om te begrijpen wat er gebeurd met een geluid is te beginnen bij diepst geneste (binnenste) context en naar buiten te werken. In dit geval is de binnenste context aangegeven met A
waar de :bd_haus
sample word gespeeld. Het geluid hiervan word direct aan de volgende context B
(het :echo
effect) gegeven. Deze voegt de echo toe aan het geluid en geeft dat weer door aan de context C
(het :reverb
(nagalm) effect). Deze voegt de nagalm to aan het inkomende geluid en geeft het op zijn beurt weer door aan de buitenste context - de linker en rechter speaker (uitgang 1 en 2 van je geluidskaart).
Bovenstaand gedrag geld voor alle synths (inclusief live_audio
) en het gros van de effecten met uitzondering van :sound_out
. Het :sound_out
effect doet twee dingen. Allereerst geeft het zijn geluid door aan de omliggende context zoals hierboven uitgelegd. Ten tweede zal geluid ook direct naar een uitgang van geluidskaart worden gestuurd. Dat ziet er dan zo uit:
with_fx :reverb do # C
with_fx :sound_out, output: 3 do # B
sample :bd_haus # A
end
end
In dit voorbeeld gaat het sample geluid :bd_haus
naar zijn omvattende context, het :sound_out
effect in dit geval. Welke het, zoals verwacht, op haar beurt doorgeeft aan zijn omvattende context, het :reverb
effect. Maar het zal ook een mono mix van het geluid naar de 3de uitgang van de computers geluidskaart sturen. Het geluid door :sound_out
heeft dan dus twee bestemmingen, het :reverb
effect en geluidskaart uitgang nummer 3.
Zoals we hebben gezien zal het :sound_out
effect een mono mix maken van het inkomende stereo geluid. Dit levert wel een stereo geluid op dat (zoals verwacht) aan de buitenste context word gegeven. Als je nou liever geen mono mix wilt doorgeven dan zijn er een aantal alternatieve opties. Allereerst kun je met de mode:
optie kiezen of je alleen het linker of het rechter inkomende geluid wilt gebruiken. Of je kunt het :sound_out_stereo
effect gebruiken om twee opeenvolgende uitgangen op je geluidskaart te gebruiken. Meer informatie en voorbeelden kun je in de functie documentatie vinden.
Zoals we hebben gezien is het standaard gedrag van :sound_out
en :sound_out_stereo
om het geluid zowel naar volgende context (dit doen alle effecten) en naar de aangegeven uitgang op geluidskaart te sturen. Soms zul echter wensen dat het geluid alleen maar naar de uitgang op je geluidskaart word gestuurd en niet naar de volgende context (en zodoende dus niet in de mix terecht komt naar uitgang 1 en 2). Dit kun je bereiken door gebruik te maken van de standaard effecten optie amp:
, welke pas word toegepast nadat het effect is toegepast op het geluid:
with_fx :sound_out, output: 3, amp: 0 do # B
sample :loop_amen # A
end
In het bovenstaande voorbeeld is de :loop_amen
sample verstuurd naar zijn buitenste context, de :sound_out
FX. Dit stuurt dan een mono mix naar audiokaart output 3 en vermenigvuldigd de audio vervolgens met 0 wat het feitelijk verstomt. Het is dit verstomde signaal dat wordt uitgestuurd naar de buitenste context van :sound_out
wat de standaard output is. Daarom ontvangen de default outputkanalen geen audio met deze code en kanaal drie zal een mono mix van de amen drum rust ontvangen.