Одним простым (и, должно быть, уже знакомым) способом доступа к аудио входам является использование нашего друга 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
.