Аудио выход

До сих пор в этом разделе мы рассматривали, как получить несколько потоков аудио в 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.