製作一首歌曲
好樣的!你的歌曲已經有了穩定的節拍和低音並且跟主旋律配合良好了。下面我們要做的能釋放出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