编辑Drum Loop

本节将介绍loop的简单编程方法。

播放Drum Loop采样

Sonic pi 内置多种风格的drum loop采样,我们来播放一个内置loop听听看

sample :loop_compus

冒号后是采样名称,当你输入:loop_后稍等,会出现loop下存储的多个采样,你可以随意挑选一个自己中意的loop

为了循环播放,我们将上面的指令放进live_loop

播放时长2小结一个循环(8拍)

live_loop :drum do
    sample :loop_compus
    sleep 8
end

但实际播放时发现好像有些混乱,原因是采样本身的速度与现在的默认速度有出入。所以需要将:loop_compus的长度拉伸到当前8拍的长度,所以用到了beat_stretch. 这个指令与ableton 里sample warp有些类似。

use_bpm 120
live_loop :drum do
    sample :loop_compus, beat_stretch:8
    sleep 8
end

现在你可以通过修改use_bpm自由修改loop速度。但是因为速度提升,鼓的音调也会升高,这就和磁带快进时的声音效果是一样的。

编辑Pattern

分析pattern

下面的pattern是要用代码打出的一段鼓

Kick    X - - -    X - - -    X - - -    X - - - 
Snare   - - - -    X - - -    - - - -    X - - -
Hihat   X - X -    X - X -    X - X -    X - X -

这个网格状表格是3X16大小的。每行分别代表底鼓,军鼓,镲片三种乐器。16列表示它有1个小节,每小节4拍,而每拍又能均分成四份(四分音符)。4X4构成16步,是音序器最常见的界面

从图像看镲片的节奏最密集,其次是底鼓,最后是军鼓,但是每一轨/行各自间隔是不变的。所以我们用程序表示这段节奏时,关键在于设定每个乐器被触发的时间间隔。

代码鼓手的第一步

基础的节奏都是以底鼓为参照的,所以底鼓一拍一次,那么相应的军鼓就是两拍一次,镲片一拍两次。

程序使用sleep指令数拍,

Sleep 1 = 1拍

那么节奏应该这样表示

Kick: sleep 1

Snare: sleep 2

Hats: sleep 0.5

有了这个草稿,我们先找到各轨道的采样,之后按照这个时间间隔来播放。

底鼓:sample :drum_bass_hard

军鼓:sample :drum_snare_hard

镲片:sample :drum_cymbal_hard

但是加入sleep 后,每一条采样都是按顺序播放,而不是同时播放

sample :drum_bass_hard
sleep 1
sample :drum_snare_hard
sleep 2
sample :drum_cymbal_hard
sleep 0.5

原因是程序会一条一条读取。除非你将三组乐器分配到3组平行的轨道里,才能实现同时播放。

知道原因后,我们就创建3个不同的live_loop,把上面的代码分别放进来吧。

use_bpm 120

live_loop :kick do
    sample :drum_bass_hard
    sleep 1
end

live_loop :snare do
    sample :drum_snare_hard
    sleep 2
end

live_loop :hats do
    sample :drum_cymbal_hard
    sleep 0.5
end

use_bpm 120 升高至140,你会发现节奏确实加快了。

但并不会像播放loop那样,提升乐器的音调。

初步编辑节奏与力度

自己设定节奏制作loop真的很简单。如果想更进一步,你可以试着改变镲片的节奏,比如像这样:

live_loop :hats do
  sample :drum_cymbal_hard
  sleep [0.75,0.5].choose
end

sleep [0.75,0.5].choose会随机选择0.75或0.5的时值。也就是说,有可能一拍打两次镲,也有可能在一拍的3/4位置打镲。

live_loop :hats do
  sample :drum_cymbal_hard, amp:rrand(0.8,1)
  sleep [0.75,0.5].choose
end

或者模仿真实鼓手的效果,使镲的声音听起来更自然。

在音量amp上添加范围在(0.8,1)的随机数。如果在ableton live, 相同的操作是挂上random velocity的插件。但是sonic pi播放采样时并没有将其视作MIDI,所以我就简单粗暴的修改了音量。也许还会存在其他的方法,比如修改filter数值。但不论是哪种操作,都会用到随机数。

最终完整代码

use_bpm 120

live_loop :kick do
    sample :drum_bass_hard
    sleep 1
end

live_loop :snare do
    sample :drum_snare_hard
    sleep 2
end

live_loop :hats do
  sample :drum_cymbal_hard, amp:rrand(0.8,1)
  sleep [0.75,0.5].choose
end

results matching ""

    No results matching ""