13.3 Geluid Uitvoer

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