还记得和弦吗?和弦功能能给在特定和弦内给出一个音符。
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
任何环内的音符都可以勾选(列表里当然也是可以的但是一到结尾就停止了)。环是一种特殊列表,到结尾还会重新开始。就像之前例子里面音阶到最后一个音符重新开始一样。.scale
和chord
都能回到一个环。你想创建一个环状列表的话就用.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
开始勾选,噪起来!