好样的!你的歌曲已经有了稳定的节拍和低音并且跟主旋律配合良好了。下面我们要做的能释放出Sonic Pi的真正潜力。在轨道上添加一些生成元素,我们能用编程让计算机为我们作曲!
移调意味着向上或向下改变音高。我们可以偶尔将旋律移调来增添曲子新鲜感。你可以掷骰子来决定什么时候来让曲调上扬。下面是举例:
live_loop :melody do
if one_in(6)
use_transpose 2
else
use_transpose 0
end
play_pattern_timed [:c4, :e4, :f4, :g4, :f4, :e4, :f4, :g4, :f4, :e4, :f4], [0.25, 0.25, 0.25, 1.5, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25], attack: 0, release: 0.2
end
让我们给低音循环加点料。.choose
是一种非常顺手的方法,用来从列表中随机挑选一个元素。就像这样:
play [:c, :e, :g].choose
[:c, :e, :g]
是一串音符(此情况下音符是C大调和弦)。.choose
指令会随机选取音符。其他内容也可以随机选取,比如sleep
的数值:
loop do
use_octave [0, 1].choose
play [:c, :e, :g].choose
sleep [0.25, 0.25, 0.5, 1].choose
end
你都不需要记得你在哪个和弦里写了什么音符。Sonic Pi你能帮你搞定一切。你可以用(chord :C, :major)
来替代[:c, :e, :g]
。这样就能自动生成一串正确的音符。例如:
loop do
play (chord :c, :major).choose
sleep [0.25, 0.25, 0.5, 1].choose
end
把这个神奇的方法用在低音音轨上看看能创造出什么奇迹。保存你的作品然后把现在的:bass
循环复制到另一个缓存上,以防你还想回到原处。接着给新的低音音轨腾出位置并删除循环里面的内容。我们用古典:tb303
合成器在C大调和弦里演奏随机的十六分音符。
live_loop :bass do
use_synth :tb303
play (chord :C2, :major).choose
sleep 0.25
end
哎呀,好像哪里不对。在play
指令末尾加上参数release:0.125
,像这样试试:
live_loop :bass do
use_synth :tb303
play (chord :C2, :major).choose, release: 0.125
sleep 0.25
end
这就好多了嘛,尽管我们还有点删减要做。到现在为止你已经在play
指令里运用了attack:
和release:
参数。还有很多参数可以根据你的合成器来添加。 例如tb303合成器就有45个可调选项。我们现在给低音音轨添加cutoff指令。Cutoff能把所有不在范围内的频率清除。可以输入的数值范围在0-130间。
设定随机数值时别只是用固定的cutoff数值。还可以用rrand(min, max)
指令来划定数值范围。赶快试试!
live_loop :bass do
use_synth :tb303
play (chord :C2, :major).choose, release: 0.125, cutoff: rrand(60, 110)
sleep 0.25
end
太太太太棒了!时刻记得多多尝试和探索。下面是一个总结举例,可以给你一个大概的前进方向:
use_bpm 120
live_loop :drums do
sample :drum_heavy_kick
sleep 1
sample :drum_snare_hard
sleep 1
sample :drum_heavy_kick
sleep 1
sample :drum_snare_hard
sleep 1
end
live_loop :hihat do
sample :drum_cymbal_closed
sleep 0.25
sample :drum_cymbal_pedal
sleep 1
end
live_loop :bass do
use_synth :tb303
play (chord :C2, :major).choose, release: 0.125, cutoff: rrand(60, 110)
sleep 0.25
end
live_loop :melody do
if one_in(6)
use_transpose 2
else
use_transpose 0
end
play_pattern_timed [:c4, :e4, :f4, :g4, :f4, :e4, :f4, :g4, :f4, :e4, :f4], [0.25, 0.25, 0.25, 1.5, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25], attack: 0, release: 0.2
end