13.2 Живое аудио

# Живое аудио

Синтез `: 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
```

Обратите внимание, что после запуска потока живого аудио в режиме стерео вы не можете изменить его на моно без остановки и перезапуска. Точно так же, если вы запустите его в монофоническом режиме по умолчанию, вы не сможете переключиться на стерео без перезапуска потока.
