1.1 라이브 코딩(Live Coding)

# 라이브 코딩

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

## 편하게 생각하세요

이 튜토리얼의 다른 부분에서 소닉 파이의 작동방법에 대한 상세한 설명에 들어가기 전에, 라이브 코드가 어떤 것인지 경험시켜 드리겠어요. 라이브 코드를 충분히 이해하지 못한다고 해도 걱정하지 마세요. 그냥 자리에 앉아서 즐겨보세요.

## 라이브 루프

자~ 시작하죠! 다음의 코드를 복사해서 비어있는 버퍼에 붙여넣으세요:

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

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

1. 아직 베이스 드럼 소리가 나는지 확인하세요
2. 'sleep' 값을 '0.5'에서 '1'처럼 더 큰 숫자로 바꿔보세요.
3. '재생'버튼을 한번 더 눌러보세요
4. 드럼 속도가 어떻게 변하였는지 주목해보세요.
5. 마지막으로, "이 순간을 기억해 두세요!", 여러분이 처음으로 소닉 파이로 라이브 코딩을 하는 순간입니다. 이 순간이 마지막이 될 것 같지는 않네요..

자, 충분히 간단하지요. 믹스에 뭔가 다른 것도 추가해 보기로 하죠. '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' 샘플에 대한 'rate: '의 값을 아주 약간('0.29'정도로) 변경하면, 어떤 일이 일어나는 지 알아봅시다. 만약 여러분이 정말 작은 'sleep' 값을 주면 어떻게 될까요? 만약 그렇게 한다면, 여러분의 컴퓨터가 너무 빨리 작동하게 되어 속도를 유지할 수 없기 때문에 오류가 나서 멈출 것입니다.   (그런 상황이 발생하면, 좀 더 큰 'sleep' 시간으로 설정하고 'Run'버튼을 다시 누릅니다).

'sample' 행 중에서 어느 한 행 맨 앞에 '#'을 추가하여 주석으로 만들어 보세요:

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

'#'이 붙은 줄은 컴퓨터가 무시하게 되고, 우리가 들을 수 없게 된다는 점에 주목하세요. 이것을 주석이라고 부릅니다. 소닉 파이에서는 믹스에 무언가를 더하거나 뺄 때 주석기능을 사용할 수 있습니다.

마지막으로, 여러분이 갖고 놀기 좋을 만한 것을 남겨두겠습니다. 아래 코드를 복사해서 여분의 버퍼에 붙여넣으세요. 지금은 두 개의 루프가 있는 걸 확인하는 것 외에는 너무 많이 이해하려고 하지 마세요 - 이 루프들로 두 가지 일을 동시에 하게 됩니다. 이제, 여러분이 가장 잘 하는 걸 하세요 - 실험하고 놀아보세요. 여기 몇가지 해볼 만한 것들이 있습니다:

* 샘플 사운드가 바뀌는 것을 들어보기 위해 파랑색 'rate:'의 값을 변경해 봅시다.
* 'sleep' 시간을 바꾸어서 두 루프가 서로 다른 속도로 돌아가는 것을 들어보세요.
* 샘플 라인을 주석해제('#'을 삭제하면 됨)해서 기타연주가 거꾸로 재생되는 것을 즐겨보세요.
* 파랑색  'mix:' 값 하나를 '0'(믹스하지 않음)에서 '1'(완전히 믹스함)사이의 값으로 바꾸어 보세요.

'Run' 버튼을 누르면, 다음 번 루프에서 변경된 부분이 들린다는 것을 기억하세요. 잘 안되더라도, 걱정하지 마세요 - 'Stop' 버튼을 누른 후, 버퍼에서 코드를 지우고 새로 복사해서 붙여넣으면 다시 연주할 수 있습니다. 실수를 하면 더 빨리 배울 수 있습니다...


```
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
```

이제, 이 모든 것이 실제로 어떻게 작동하는지 궁금증이 생길 때까지 계속 놀고 실험해 보시면, 이걸로 다른 무언가를 할 수 있을지 궁금해지기 시작할 것입니다. 여러분은 이제 이 튜토리얼의 나머지 부분을 읽을 준비가 된 것이지요.

뭘 기다리는 건가요...
