# Лайв-кодинг

Одним из самых захватывающих аспектов Sonic Pi является то, что для создания музыки, вы можете писать и изменять код здесь и сейчас. Это похоже на настоящее выступление с гитарой. Значит, при достаточной тренировке, вы сможете взять Sonic Pi с собой на сцену и выступать с ней.

## Расширьте своё сознание

Прежде, чем мы перейдем к деталям того, как Sonic Pi работает, я бы хотел поделиться с вами личным опытом того, что значит “лайв-кодинг”. Не переживайте, если вы пока чего-то из этого (или ничего) не понимаете. Просто держитесь крепче за стул и получайте удовольствие…

## Живой цикл

Для начала скопируйте следующий код в пустой буфер:

    live_loop :flibble do
      sample :bd_haus, rate: 1
      sleep 0.5
    end

Теперь нажмите кнопку `Выполнить`, и вы услышите приятный быстрый барабанный бой. В любой момент нажмите кнопку `Остановить`, чтобы остановить звук. Но не нажимайте её пока что… Вместо этого сделайте вот что:

Убедитесь, что барабаны по-прежнему звучат Измените значение `sleep` с `0.5` на значение побольше, например `1`. Еще раз нажмите кнопку `Выполнить` Можно заметить, что темп барабанов изменился. И, наконец, запомните этот момент - это первый, и, наверняка, не последний ваш лайв-кодинг на Sonic Pi…

Ладно, это было довольно просто. Давайте добавим что-нибудь ещё в наш микс. Сверху от `sample :bd_haus` добавьте строку `sample :ambi_choir, rate: 0.3`. Ваш код должен выглядеть так:

    live_loop :flibble do
      sample :ambi_choir, rate: 0.3
      sample :bd_haus, rate: 1
      sleep 1
    end

Время поиграться. Поменяйте частоту. Что происходит, когда вы используете высокие, малые, или отрицательные значения? Посмотрите, что произойдет, когда вы поменяете значение `rate:` для сэмпла `:ambi_choir` на незначительную величину (например до `0.29`). Что произойдет, если вы выберите очень маленькое значение для `sleep`? Проверьте, получится ли заставить его играть так быстро, что ваш компьютер прекратит свою работу и выдаст ошибку из-за того, что он не справится с этим (если это всё же произошло, то просто выберите значение побольше для `sleep` и снова нажмите `Выполнить`).

Попробуйте закомментировать одну из строк `sample`. Для этого добавьте `#` в ее начало:

    live_loop :flibble do
      sample :ambi_choir, rate: 0.3
    #  sample :bd_haus, rate: 1
      sleep 1
    end

Обратите внимание, компьютер проигнорировал её, поэтому мы её не слышим. Это называется комментарием. В Sonic Pi мы можем использовать комментарии, чтобы убирать или добавлять штуки в микс.

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

Попробуйте изменить синее значение `rate:`, чтобы услышать, как изменится звук. Попробуйте изменить время для `sleep` и вы услышите, как оба цикла повторяются по кругу с разными темпами. Попробуйте раскомментировать строку примера (удалите знак `#`) и наслаждайтесь звуками гитары на заднем плане. Попробуйте поменять синее значение любого из `mix:` на число в промежутке от `0` (что соответствует исключению из общего микса) до `1` (полностью сочетается).

Не забывайте нажимать `Выполнить`, и вы услышите изменения в следующий раз, когда петля начнётся заново. Не расстраивайтесь, если в конце музыка будет испорчена. Нажмите `Остановить`, удалите код из буфера, вставьте свежую копию, и вы снова готовы к творчеству. На ошибках научиться можно быстрее всего…

Не забывайте нажимать `Выполнить`, вы будете слышать изменения на каждой следующей итерации цикла. Не бойтесь ломать музыкальную композицию. Всегда можно нажать `Остановить`, удалить код из буфера и вставить свежую копию. Не забывайте - процесс творчества тесно связан с совершением ошибок…

    live_loop :guit do
      with_fx :echo, mix: 0.3, phase: 0.25 do
        sample :guit_em9, rate: 0.5
      end
    #  sample :guit_em9, rate: -0.5
      sleep 8
    end
    live_loop :boom do
      with_fx :reverb, room: 1 do
        sample :bd_boom, amp: 10, rate: 1
      end
      sleep 8
    end

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

Так чего же вы ждёте…