声音生成

Tick指令

还记得和弦吗?和弦功能能给在特定和弦内给出一个音符。

play (chord :c, :major).choose 
#随机演奏C大调和弦的一个音符(:c, :e or :g)

还有一个功能叫做音阶。音阶功能把所有音符归到同一个音阶里面,不仅仅是一个和弦里。

play (scale :c, :major).choose 
#演奏C大调音阶的随机音符(:c, :d, :e, :f, :g, :a or :b)

筛选后你可以在列表里面得到一个随机元素。如果你想在更加结构化的方式里面得到数值,Sonic Pi有一个强大的功能叫做tick:

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

此处我们拿E3小调五声音阶举例然后勾选每个元素。在音阶说明的结尾加上 .tick就能实现。此勾选只在所处循环内有效,所以每个活循环都可以有自己的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 

任何环内的音符都可以勾选(列表里当然也是可以的但是一到结尾就停止了)。环是一种特殊列表,到结尾还会重新开始。就像之前例子里面音阶到最后一个音符重新开始一样。.scalechord都能回到一个环。你想创建一个环状列表的话就用.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

下面的例子会复杂一点。现在你有一个已经成环并且被勾选了的列表。

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

开始勾选,噪起来!