Аудио вход

Одним простым (и, должно быть, уже знакомым) способом доступа к аудио входам является использование нашего друга synth с указанием для него пути : sound_in:

synth :sound_in

Это будет работать так же, как и любой синтезатор, такой как «synth: dsaw», за исключением того, что сгенерированный звук будет считываться непосредственно с первого входа звуковой карты вашей системы. На ноутбуках это обычно встроенный микрофон, но если у вас есть внешняя звуковая карта, вы можете подключить любой аудиовход к первому входу.

Увеличение длительности

Одна вещь, которую вы могли бы заметить, это то, что как synth: dsaw, синтезатор: sound_in длится всего 1 такт, поскольку к нему применяется стандартная огибающая. Если вы хотите, чтобы он звучал немного дольше, измените настройки огибающей ADSR. Например, следующий код будет ближайшие 8 тактов держать открытым аудиовход для нашего синтезатора:

synth :sound_in, sustain: 8

Добавление эффектов

Конечно, как и на любой обычный синтезатор, вы можете легко накладывать на него эффекты с помощью FX-блока:

with_fx :reverb do
  with_fx :distortion do
    synth :sound_in, sustain: 8
  end
end

Если вы подключили гитару к первому входу, вы должны услышать ее с искажением и реверберацией, пока исполняется код.

Вы можете использовать синтезатор : sound_inодновременно столько раз, сколько вам нравится (точно так же, как вы делаете это с любым обычным синтезатором). Например, следующий код будет воспроизводить два синтезатора : sound_in одновременно - один с искажением, а другой с реверберацией:

with_fx :distortion do
  synth :sound_in, sustain: 8
end
with_fx :reverb do  
  synth :sound_in, sustain: 8
end

Многоканальный вход

Вы можете выбрать, какой аудиовход вы хотите воспроизвести, с помощью опции input:. Вы также можете указать стереовход (два последовательных входа), используя синтезатор : sound_in_stereo. Например, если у вас есть звуковая карта с по крайней мере тремя входами, вы можете рассматривать первые два как стереопоток и добавлять искажения, а третий - как монопоток и добавлять реверберацию со следующим кодом:

with_fx :distortion do
  synth :sound_in_stereo, sustain: 8, input: 1
end
with_fx :reverb do  
  synth :sound_in, sustain: 8, input: 3
end

Потенциальные сложности

Однако, хотя это и действенный метод, у этого подхода есть несколько ограничений. Во-первых, он работает только в течение определенного периода времени (из-за наличия огибающей ADSR), и, во-вторых, нет возможности переключать эффекты после запуска исполнения кода. Обе эти вещи являются типичными запросами при работе с внешними аудиопотоками от микрофонов, гитар и внешних синтезаторов. Поэтому мы рассмотрим предлагаемое Sonic Pi решения проблемы (потенциально) бесконечного потока живого аудиовхода: live_audio.