13.3 Аудио выход

# Аудио выход

До сих пор в этом разделе мы рассматривали, как получить несколько потоков аудио в Sonic Pi - это возможно либо с помощью синтезатора `: sound_in`, либо с помощью мощной системы` live_audio`. В дополнение к работе с несколькими потоками входного аудио, Sonic Pi также может выводить несколько аудио потоков. Это достигается с помощью FX-контектса `: sound_out` .

## Выходные контексты

Давайте быстро вспомним, как синтезаторы и эффекты в Sonic Pi выводят свое аудио в текущий контекст FX. Рассмотрим следующее:

```
with_fx :reverb do    # C
  with_fx :echo do    # B
    sample :bd_haus   # A
  end
end
```

Самый простой способ понять, что происходит с аудиопотоком, - это начать с аудио контекста, находящегося ближе всего к центру блока, и двигаться от него наружу. В этом случае самый внутренний контекст, представляющий собой исполняемый сэмпл`: bd_haus`, пометим как `A`. Аудио из него идет напрямую в его контекст, который назовем `B` - это эффект`: echo`. Это добавляет эхо к входящему аудио и выводит его в его контекст `C` - эффект `: reverb`. Затем к входящему потоку аудио добавляется реверберация и он выводится в контекст, который является самым верхним уровнем - это левый и правый динамики (выходы 1 и 2 на вашей звуковой плате). Аудио движется от начала до выхода на динамики, будучи на всем протяжении стереофоническим потоком.

## Аудио выход FX

Вышеуказанное поведение верно для всех синтезаторов (включая `live_audio`) и большинства эффектов за исключением`: sound_out`. FX-контектс `: sound_out` делает две вещи. Во-первых, он выводит звук во внешний контекст по отношению к себе контекст, как описано выше. Во-вторых, он * также * выводит звук напрямую на выход звуковой карты. Давайте взглянем на это:

```
with_fx :reverb do      # C
  with_fx :sound_out, output: 3 do # B
    sample :bd_haus     # A
  end
end
```

В этом примере наш сэмпл `: bd_haus` выводит свое аудио во внешний контекст, который является FX-контекстом `: sound_out`. Это в свою очередь выводит звук далее во внешний  FX-контекст `: reverb` (как и ожидалось). Однако он * также * выводит монофонический микс на 3-й выход звуковой карты системы. Поэтому звук, сгенерированный внутри `: sound_out`, имеет два назначения - FX-контекст `: reverb` и выход звуковой карты 3.

## Моно и стерео выходы

Как мы уже видели, по умолчанию FX-контекст `: sound_out` выводит монофонический микс стереовхода на определенный канал в дополнение к передаче стереофонического канала во внешний контекст (как и ожидалось). Если вывод моно микса не совсем то, что вы хотите сделать, есть ряд альтернативных вариантов. Во-первых, используя опцию `mode:`, вы можете задать вывод только левого или только правого входного сигнала на звуковую карту. Или вы можете использовать FX-контекст `: sound_out_stereo` для вывода аудио на два последовательных выхода звуковой карты. Смотрите документацию функций для получения дополнительной информации и примеров их работы.

## Прямой выход

Как мы также видели, поведение по умолчанию для `: sound_out` и`: sound_out_stereo` заключается в отправке аудио как во внешний контекст (что типично для всех эффектов), так *и * на указанный выход на вашей звуковой карте. Однако иногда вам может потребоваться * только * отправить аудио на выход звуковой карты, а не во внешний контекст (, следовательно, без микширования и передачи аудио на стандартные выходные каналы 1 и 2). Это возможно при использовании стандартной опции FX-контекста `amp:`, который работает с аудио *после того*, как FX-контекст смог бы на это аудио повлиять:

```
with_fx :sound_out, output: 3, amp: 0 do # B
  sample :loop_amen                      # A
end
```

В приведенном выше примере сэмпл `: loop_amen` отправляется во внешний FX-контекст `: sound_out` . Затем он отправляет монофонический микс на выход 3 звуковой карты, а затем умножает звук на 0, что, по сути, приводит к его отключению. Именно этот заглушенный сигнал затем отправляется во внешний контекст `: sound_out`, который является стандартным выходом. Поэтому с этим кодом выходные каналы по умолчанию не будут принимать никакого звука, а 3-й канал получит монофонический микс из amen drum break.
