# 라이브 코딩

소닉 파이의 가장 멋진 특성 중 하나는 음악을 만들기 위해 코드를 작성하고 실시간으로 수정할 수 있다는 것입니다. 여러분이 기타로 라이브 연주를 하는 것과 같죠. 즉, 연습을 하면 소닉 파이를 가지고 무대에서 연주를 할 수 있다는 것이죠.

## 편하게 생각하세요

Before we get into the real details of how Sonic Pi works in the rest of this tutorial, I’d like to give you an experience of what it’s like to live code. Don’t worry if you don’t understand much (or any) of this. Just try to hold onto your seats and enjoy…

## A live loop

자~ 시작하죠! 아래 코드를 복사해서 비어있는 버퍼에 붙여넣읍시다:

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

이제 ‘재생’ 버튼을 누르면, 멋지고 빠른 베이스 드럼을 치는 소리가 들릴거에요. 만약 언제라도 소리를 중단시키고 싶으면, ‘중지’ 버튼을 누르면 됩니다. 지금은 ‘중지’버튼을 누르지 말고, 다음 단계를 따라 해보기로 하지요:

아직 베이스 드럼 소리가 나는지 확인하세요 ‘sleep’ 값을 ‘0.5’에서 ‘1’처럼 더 큰 숫자로 바꿔보세요. ‘재생’버튼을 한번 더 눌러보세요 드럼 속도가 어떻게 변하였는지 주목해보세요. Finally, remember this moment, this is the first time you’ve live coded with Sonic Pi and it’s unlikely to be your last…

Ok, that was simple enough. Let’s add something else into the mix. Above `sample :bd_haus` add the line `sample :ambi_choir, rate: 0.3`. Your code should look like this:

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

Now, play around. Change the rates - what happens when you use high values, or small values or negative values? See what happens when you change the `rate:` value for the `:ambi_choir` sample just slightly (say to `0.29`). What happens if you choose a really small `sleep` value? See if you can make it go so fast your computer will stop with an error because it can’t keep up (if that happens, just choose a bigger `sleep` time and hit `Run` again).

Try commenting one of the `sample` lines out by adding a `#` to the beginning:

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

Notice how it tells the computer to ignore it, so we don’t hear it. This is called a comment. In Sonic Pi we can use comments to remove and add things into the mix.

Finally, let me leave you something fun to play with. Take the code below, and copy it into a spare buffer. Now, don’t try to understand it too much other than see that there are two loops - so two things going round at the same time. Now, do what you do best - experiment and play around. Here are some suggestions:

Try changing the blue `rate:` values to hear the sample sound change. Try changing the `sleep` times and hear that both loops can spin round at different rates. Try uncommenting the sample line (remove the `#`) and enjoy the sound of the guitar played backwards. Try changing any of the blue `mix:` values to numbers between `0` (not in the mix) and `1` (fully in the mix).

Remember to press `Run` and you’ll hear the change next time the loop goes round. If you end up in a pickle, don’t worry - hit `Stop`, delete the code in the buffer and paste a fresh copy in and you’re ready to jam again. Making mistakes is how you’ll learn the quickest…

    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

Now, keep playing and experimenting until your curiosity about how this all actually works kicks in and you start wondering what else you can do with this. You’re now ready to read the rest of the tutorial.

So what are you waiting for…