사운드 만들기

틱 (Tick)

chord를 기억하세요? 특정한 코드의 음들을 소리내는 기능을 하죠.

play (chord :c, :major).choose 
# C Major 코드의 음을 무작위로 연주합니다. (:c, :e, :g)

scale 이라는 기능도 있습니다. 스케일 (Scale)은 한 코드에 있는 음 하나만이 아닌, 같은 음계안에 있는 모든 음들을 불러옵니다.

play (scale :c, :major).choose 
# C Major 음계의 음을 무작위로 연주합니다. (:c, :d, :e, :f, :g, :a or :b)

choose를 사용해서 리스트에 있는 값을 무작위로 고를 수 있습니다. 조금 더 체계적으로 접근하고 싶은 사용자를 위해 Sonic Pi가 갖고 있는 기능이 바로 tick입니다:

live_loop :arp do
  play (scale :e3, :minor_pentatonic).tick, release: 0.1
  sleep 0.125
end

E3 Minor 펜타토닉 음계를 선택해서 각 음에 tick 기능을 넣어보겠습니다. 각 스케일 명령어 끝에 .tick을 추가해보세요. 이 tick은 live loop 명령어에 속하는거라, 각 live loop마다 각자의 tick 기능을 가질 수 있어요.

live_loop :arp do
  play (scale :e3, :minor_pentatonic).tick, release: 0.1
  sleep 0.125
end

live_loop :arp2 do
  use_synth :dsaw
  play (scale :e2, :minor_pentatonic, num_octaves: 3).tick, release: 0.25
  sleep 0.25
end 

링 (Rings)

ring을 사용해서 tick 기능을 사용할 수 있는데요. (다른 리스트들에 있는 것들에도 tick 기능을 사용할 수는 있지만 연주가 끝날때 멈추죠). Ring은 연주가 끝나고 나서도 다시 새롭게 시작되는 특별한 리스트라고 할 수 있습니다. 방금 보여준 예시에서는 마지막 음이 연주된 다음에 다시 스케일이 연주되잖아요. scalechord 모두 ring으로 돌아갑니다. 리스트를 작성한 후에 .ring을 입력해서 링을 만들거나 ring 생성기를 이용할 수 있습니다:

puts [1, 2, 3, 4].ring #=> (ring 1, 2, 3, 4)
puts (ring 1, 2, 3, 4) #=> (ring 2, 2, 3, 4)
live_loop :arp do
  play [:c, :e, :d, :f].ring.tick, release: 0.1
  sleep 0.125
end

조금 더 복잡한 예시를 보여드릴게요. 여러 리스트나 코드들을 하나의 ring에 넣고 tick 기능을 써 보겠습니다:

live_loop :keys do
  use_synth :blade
  play [(chord :Ab, :major7), (chord :Db, :major7), (chord :Bb, :minor7), (chord :Eb, '7')].ring.tick, attack: 0.1, release: 1
  sleep 1
end

이 위에 주 멜로디를 입혀볼게요:

live_loop :keys do
  use_synth :blade
  play [(chord :Ab, :major7), (chord :Db, :major7), (chord :Bb, :minor7), (chord :Eb, "7")].ring.tick, attack: 0.1, release: 1
  sleep 1
end

live_loop :lead do
  use_synth :dsaw
  play (scale :Ab, :major, num_octaves: 3).mirror.tick, attack: 0.05, release: 0.25, cutoff: rrand(80, 110), amp: 0.5
  sleep 0.25
end

tick 기능을 맘껏 써보세요!