Geluid Uitvoer

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.

Uitgangs contexten

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).

Geluid Uitvoer effecten

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.

Mono en Stereo uit

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.

Direct uit

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.