Raspberry Pi_Kor_23.3.3 Sonic Pi 사용법


Published Book on Amazon


All of IOT Starting with the Latest Raspberry Pi from Beginner to Advanced – Volume 1
All of IOT Starting with the Latest Raspberry Pi from Beginner to Advanced – Volume 2


출판된 한글판 도서


최신 라즈베리파이(Raspberry Pi)로 시작하는 사물인터넷(IOT)의 모든 것 – 초보에서 고급까지 (상)
최신 라즈베리파이(Raspberry Pi)로 시작하는 사물인터넷(IOT)의 모든 것 – 초보에서 고급까지 (하)


Original Book Contents


23.3.3  Sonic Pi 사용법

 

23.3.3.1    Step 1 - Sonic Pi로 처음 소리 내기

 

먼저 [Workspace 1]을 선택하여 아래와 같이 입력한다. 그런 다음 [Run] 버튼을 click해 본다. 어떤 일일 발생하는가? 그러면 beep 음이 들릴 것이다.

 

play 60

 

이번에는 아래와 같이 입력하고 [Run] 버튼을 눌러본다. 이번에는 아무 소리도 들리지 않고, workspace 아래에 오류 내용을 보여주는 부분이 나타날 것이다. 이것은 명령을 잘못 입력한 경우 오류가 있다는 것을 표시하는 것이다

 

pley 60


그림 23‑5 Sonic Pi workspace

 


 

이제 다시 다음 내용을 입력하고 [Run] 버튼을 눌러서 실행해 본다.             

 

play 60
play 67
play 69

 

그러면 컴퓨터에서 각 음표에 대해 순차적으로 하나씩 어떤 소리를 연주하는데, 너무 빨라서 동시에 소리가 나는 것처럼 들려서 정확히 어떤 것인지 구분하기가 어렵다. 그래서 각 음표 사이에 약간의 휴지 시간를 주어서 구분해 보기로 한다. 이를 위해서는 각 "play" 문장 다음에 다음 명령을 사용할 수 있다.

 

sleep 1

 

"sleep" 문 다음에 지정한 숫자는 second 시간을 의미한다. 숫자 1 1초를 이미하고, 0.5와 같이 소수점을 사용할 수도 있다. 이제 깔끔한 곡조를 만들기 위해서 "play" "sleep" 문을 이용하여 다음과 같이 입력한 다음 [Run] 버튼을 눌러서 음을 감상해 보자.

 

play 60
sleep 0.5
play 67
sleep 0.5
play 69
sleep 0.5

 


 

23.3.3.2    Step 2 – 곡조 반복

 

지금까지 Sonic Pi 기초를 공부했으니,이제 곡조를 만들기 위한 code를 작성해 보자. [Workspace 2]를 선택하고 다음 code를 입력한다.

 

play 60
sleep 0.5
play 62
sleep 0.5
play 64
sleep 0.5
play 60
sleep 0.5

 

[Run] 버튼을 눌러서 실행하면 음조가 연주된다. 그런데, 어떤 곡에서 이 부분이 두번 연주되어야 한다면, 어떻게 두번을 반복할 수 있을까? 가장 간단한 방법은 위 문장을 두번 입력하는 방법일 것이다. 그 외에 또 다른 방법이 있는데, 지금 설명하고자 하는 loop 처리 방법이다. 다음과 같이 "do" "end" 문장을 입력하는데, 위의 모든 명령을 "do" 문과 "end" 문 사이에 입력한다.

 

2.times do
      문장 
end

 

최종적으로 다음과 같이 입력하고 [Run] 버튼을 눌러 실행해 본다. 그러면 전체 내용이 두번 연주되는 것을 확인할 수 있다.

 

2.times do
  play 60
  sleep 0.5
  play 62
  sleep 0.5
  play 64
  sleep 0.5
  play 60
  sleep 0.5
end

 

위 사례에서 보면 "do" "end" 사이의 문장들이 오른쪽으로 들어간 형태로 정렬되어 있다. 이렇게 하는 것은 작성되어 있는 프로그램 code들을 읽기 쉽게하고, 나중에 실행했을 때 오류가 있는 경우 bug을 쉽게 찾을 수 있도록 프로그램 code를 잘 정렬해 주기 위한 것이다. 이렇게 정렬하기 위해서는 space bar를 두번 누르면 된다.

 

앞에서는 반복 회수를 지정해서 음표를 반복했지만, 영원히 반복하고 싶을 때는 "loop do" "end" 문을 사용한다. 즉 다음과 같은 형식으로 사용하는 것이다

 

loop do
  play 60
  sleep 0.5
end

 


 

23.3.3.3    Step 3 - MIDI 음표와 음악의 음표

 

우리가 앞에서 "play" 문 다음에 지정한 숫자 값은 어떤 음표이다. 사실 그들은 MIDI note이다. 이것은 우리가 피아노로 연주되는 노래를 연주하려면 Sonic Pi MIDI 음표로 변환해야 한다는 것을 의미한다. 두 음표 사이에는 다음과 같은 관계가 있다.

 

Music Note

C

D

E

F

G

A

B

MIDI Note

60

62

64

65

67

69

71

23‑1 음악의 음표와 MIDI 음표 값의 관계

만약 여러분이 연주하고자 하는 노래에 대해서 MIDI note를 만들어내고자 하면 아주 귀찮은 일이 될것이다. 다행히도 Sonic Pi에서는 표준 악보의 표현을 그대로 사용할 수가 있다.

 

이번에는 새로운 Workspace에서 아래와 같이 입력을 해보자. 그런 다음 연주를 해보고 앞의 MIDI 음표로 작성한 것과 동일한지를 점검해 본다.

 

play :c4
sleep 0.5
play :d4
sleep 0.5
play :e4
sleep 0.5
play :c4
sleep 0.5

 


 

23.3.3.4    Step 4 - synthesizer를 이용한 sound 변경

 

이제 음악 곡조를 좀더 흥미있게 만들 때가 되었다. 우리는 synthesizer sound를 변경하여 이러한 소리를 만들 수 있다. Sonic Pi의 기본 synth beep라고 한다. 다른 synth를 사용하려면 사용하고자 하는 일련의 code 위에 다음 형식의 문장을 사용하면 된다.

 

use_synth :name of synth

 

아래의 예에서는 synth fm을 이용해서 작업을 한 것이다.

 

use_synth :fm
2.times do
  play 60
  sleep 0.5
  play 67
  sleep 0.5
end

 


 

    사용할 수 있는 Synths

 

Sonic Pi에는 깨끗하게 들리는 많은 synths가 미리 포함되어 있다. 그 내용을 보려면 화면 위에 있는 [Help] 버튼을 눌러서 [Help] window가 나타나도록 하고, 그 왼쪽에 있는 Tab에서 [Synths]를 선택한다. 그런 다음 사용법에 대한 더 많은 정보를 알고 싶으면 원하는 synth 이름을 클릭하면 된다.

 



23.3.3.5    Step 5 sample 사용

 

Sonic Pi에서 음표만을 사용하여 음악을 만들수도 있고, sample을 이용하여 음악을 만들 수도 있다. sample은 사전 녹음된 음악이나 곡조로서 음악에 넣어서 곧바로 사용할 수 있다. 이것을 사용하면 아주 간단하게 여러분의 음악을 놀란만한 것으로 만들 수 있다.

 

sample을 사용하기 위해서는 그것을 사용하고자 하는 음악 프로그램의 원하는 순서에서 다음 code의 문장을 추가한다.

 

sample :name of sample

 

아래의 예에서는 "loop_amen"이라는 sample을 이용해서 작업을 한 것이다.

 

2.times do
  sample :loop_amen
  sleep 1.753
end

 

    사용할 수 있는 Samples

 

Sonic Pi에는 많은 sample이 포함되어 있다. 어떤 것이 있는지를 보려면 화면 위에 있는 [Help] 버튼을 눌러서 [Help] window가 나타나도록 하고, 그 왼쪽에 있는 tab에서 [Samples]를 선택한다. 그런 다음 사용법에 대한 더 많은 정보를 알고 싶으면 원하는 sample 이름을 클릭하면 된다.


 

23.3.3.6    Step 6 – 두 곡조를 동시에 연주하기

 

음악은 보통 반복되는 반주 track이 있고, 그 위에 별도로 연주되는 melody가 있다. 우리는 지금까지 한 곡조만을 연주했는데, 이제는 곡조 두개를 동시에 연주해 보도록 하겠다.

 

새로운 workspce을 열어서 작업을 하도록 한다. 두개의 곡조를 동시에 연주할 때 사용하고자 하는 code "in_thread do" "end" 사이에 있어야 한다. "in_thread do" 아래에 원하는 곡조를 입력한다.

 

in_thread do
   곡조
end

 

여기서는 sample을 반주 track으로 사용했다. 이 첫번째 'thread'는 우리 음악의 melody로 작동할 것이다. 그 아래 반주 track or baseline으로 사용할 code를 아래와 같이 입력한다.

 

in_thread do
  loop do
    sample :loop_amen
    sleep 1.753
  end
end

 

in_thread do
  16.times do
    play 75
    sleep 1.753
    play 74
    sleep 0.25
  end
end

 

모든 작업이 완료되었으면 [Run] 버튼을 눌러 연주를 해본다. 그러면 두개의 thread가 동시에 연주되는 것을 들을 수 있을 것이다.

23.3.3.7    Step 7 – 즉흥 작곡

 

Sonic Pi는 음악을 live coding하는 platform으로 개발되었으므로, code는 실시간으로 조작하고 수정하여 적합하게 만들 수 있다. 이 말은 작곡자는 미리 만들어진 프로그램을 연주하는 것이 아니라 자신들의 곡을 연주할 수 있다는 것을 의미한다. 그럼, 우리도 한번 해봐야 하지 않는가?

 

새로운 workspace에서 다음을 입력한다.

 

define :play_my_synth do
  use_synth :prophet
    play 50, attack: 0.2, release: 1.3
  sleep 0.5
end
 
loop do
play_my_synth
end

 

그런 다음 프로그램을 연주해 본다. 연주가 되는 동안, 아래와 같이 각 행의 처음에 "#" 기호를 입력하여 주석으로 만들어 본다. 연주가 어떻게 변하는지 확인해 본다

 

# loop do
#   play_my_synth
# end

 

다음에는 code의 다른 일부를 변경하고, 다시 연주를 해 본다. 그러면 새로운 음악이 연주된다. 이제 여러분은 진정 멋있는 연주를 하고 있는 것이다.

 

 


 

Leave a Reply