Синтез : sound_in
, как описано в предыдущем разделе, предоставляет очень гибкий и знакомый метод для работы с входящим аудио. Однако, как уже говорилось, у него есть несколько проблем при работе с отдельным аудио входом в смысле отдельного инструмента (например, вашего голоса или гитары). Безусловно, лучший подход к работе с отдельным непрерывным аудиопотоком - использовать live_audio.
live_audio
разделяет с live_loop
пару основных ограничений, связанных с дизайном ядра Sonic Pi (отсюда и похожее имя). Во-первых, каждый объект такого типа должен иметь уникальное имя. Во-вторых, в любой момент времени может существовать только один поток live_audio
с таким именем. Давайте взглянем:
live_audio :foo
Этот код будет действовать подобно synth: sound_in
с некоторыми ключевыми отличиями: он работает постоянно (пока вы явно его не остановите), и вы можете перемещать его в новые FX-контексты динамически.
При первоначальном запуске, live_audio
работает с FX точно так, как вы и ожидаете. Например, чтобы запустить живой аудиопоток с добавлением реверберацией, нужно просто применить FX-блок : reverb
:
with_fx :reverb do
live_audio :foo
end
Однако, учитывая, что live_audio
работает постоянно (по крайней мере, до тех пор, пока вы его не остановите), нас сильно бы ограничило, если, как и уже известные вам обычные синтезаторы, живой аудио поток так же был бы связан с эффектом : reverb
все время своей работы. К счастью, это не тот случай, и эта функция была разработана так, чтобы было легко перемещаться между различными FX. Давай попробуем. Запустите приведенный выше код, чтобы услышать живой звук, поступающий непосредственно с первого входа вашей звуковой карты. Обратите внимание, что если вы используете ноутбук, это, как правило, ваш встроенный микрофон, поэтому рекомендуется использовать наушники, чтобы пресечь обратную связь между микрофоном и динамиками.
Теперь, пока вы все еще слышите звук в реальном времени с звуковой карты с реверберацией, измените код на следующий:
with_fx :echo do
live_audio :foo
end
Теперь нажмите Выполнить, и вы сразу услышите звук, воспроизводимый через блок эффекта эхо, вместо реверберации. Если вы хотите слышать их оба, просто отредактируйте код еще раз и нажмите Выполнить:
with_fx :reverb do
with_fx :echo do
live_audio :foo
end
end
Важно отметить, что вы можете вызывать live_audio: foo
из любого потока или живого цикла, и он будет перемещать живое аудио в текущий FX-контекст этого потока. Поэтому, для получения некоторых интересных результатов, вы можете легко иметь несколько живых циклов, вызывающих live_audio: foo
в разное время, от чего FX-контекст будет автоматически меняться.
В отличие от стандартных синтезаторов, к live_audio
не применяется огибающая, поэтому он будет работать постоянно (даже если вы удалите код, точно так же, как функция все еще определена в памяти, даже если вы удалите код в редакторе). Чтобы остановить его, вам нужно использовать аргумент : stop
:
live_audio :foo, :stop
Его можно легко перезапустить, выполнив код без аргумента : stop
:
live_audio :foo
Кроме того, все запущенные живые звуковые потоки останавливаются, когда вы нажимаете глобальную кнопку «Стоп» (это работает и для всех других исполняемых синтезаторов и эффектов).
Что касается аудиоканалов, то по умолчанию live_audio
работает аналогично синтезатору: sound_in
в том смысле, что он принимает отдельный монофонический входной аудио поток и преобразует его в стереопоток, используя заданное панорамирование. Однако, как и в случае : sound_in_stereo
, можно также указать live_audio
, читать два последовательных аудиовхода и обрабатывать их напрямую как левый и правый каналы. Это достигается через опцию : stereo
. Например, чтобы обрабатывать вход 2 как левый канал, а вход 3 - как правый канал, необходимо указать опции input:
значение 2 и включить стереорежим следующим образом:
live_audio :foo, stereo: true, input: 2
Обратите внимание, что после запуска потока живого аудио в режиме стерео вы не можете изменить его на моно без остановки и перезапуска. Точно так же, если вы запустите его в монофоническом режиме по умолчанию, вы не сможете переключиться на стерео без перезапуска потока.