间奏9:如何制作小军鼓渐强
间奏9:如何制作小军鼓渐强
小军鼓渐强是一种加速的鼓滚,标志着歌曲中的过渡点。这是在节拍落下之前增加能量和兴奋感的常见技术。在本教程中,你将用Python编写一个基本的渐强模式,然后添加一些效果,如随机音量、音高移动和声像定位。你可以在线在TunePad中跟随:https://tunepad.com/interlude/snare-riser
步骤1:基本模式
小军鼓渐强的一个简单版本演奏4组8个音符,每一轮新音符的演奏速度是前一轮的两倍。这创建了一个加速模式,看起来像这样(图9.5)。

我们可以用几种不同的方式在代码中创建这个模式。在你查看我们想出的东西之前,花几分钟尝试想出你自己的解决方案。
duration = 1.0 # 每个音符的持续时间
for i in range(4): # 4组音符
for j in range(8): # 每组有8个音符
playNote(2, beats = duration)
duration = duration / 2 # 将音符持续时间减半我们的版本使用两个for循环,一个嵌套在另一个内。外循环重复四次(第2行),内循环重复八次(第3行)。这意味着第4行的playNote被调用8 x 4 = 32次。每个音符的长度由我们在第1行声明的duration变量决定。这个变量以值1.0开始,但在外循环的每次迭代中,我们将值除以一半。
替代模式
这是一个替代的小军鼓渐强模式,其中每个音符的演奏速度比前一个音符稍快(图9.6)。

这个模式只使用一个循环,我们通过将其乘以0.94(使其为当前值的94%)来每次减少duration变量。这种 tapering 被称为指数衰减。
duration = 1.0
for i in range(40):
playNote(2, beats = duration)
duration = duration * 0.94步骤2:随机音量
现在我们有了基本模式,我们可以开始添加一些不同的效果。首先,让我们通过在每个小军鼓敲击的音量中添加变化来创建更像人类的感觉。我们可以用Python的内置randint函数做到这一点。调用randint生成两个值之间的随机整数。在下面的示例中,我们生成85和100之间的随机值,我们将其传递给playNote的velocity参数。效果是声音纹理中微妙但明显的变异。
from random import randint
duration = 1.0
for i in range(4): # 四组八拍
for j in range(8):
volume = randint(85, 100) # 生成随机数
playNote(note = 2, # 演奏小军鼓声音
beats = duration, # 每个音符的持续时间
velocity = volume) # 随机音量
duration = duration / 2 # 将音符持续时间减半步骤3:上升音高
为了建立上升兴奋感,有助于在跑动中增加小军鼓的音高。我们可以使用TunePad中的with bend指令来实现这种效果。我们向效果提供一个以分为单位的数字,说明要改变多少音高。例如,100分的值将音高增加一个半音(C和C♯之间的距离)。并且,200分的值将音高增加两个半音(C和D之间的距离)。我们将在16拍的时间内将音高移动1,000分,以增加10个半音。
from random import randint
with bend(cents = 1000, beats = 16):
for i in range(4):
for j in range(8):
playNote(note = 2,
beats = pow(2, -i),
velocity = randint(85, 100))在这个版本的代码中,我们通过去掉duration和volume变量简化了一些事情。相反,我们在调用playNote时直接内联执行相同的计算。
步骤4:将所有东西放在一起
为了完成,这里有一个随时可用的snare_riser函数,它将代码包装在单个函数内,你可以在下一个项目中使用。第1行的def关键字用于声明我们命名为snare_riser的函数。声明函数后,你可以通过名称调用它来使用它:snare_riser()。
from random import randint
def snare_riser():
for i in range(4):
for j in range(8):
playNote(note = 2,
beats = pow(2, -i),
velocity = randint(85, 100))可选:声像扩展
这是最后一个效果,使用同时演奏的两个不同的小军鼓声音。第一个被声像定位到最左,第二个到最右,以扩展声音。这意味着我们完全从左扬声器听到一个声音,另一个完全从右扬声器出来。这是我们的snare_riser函数的更新版本,包括这种效果。秘密成分是with pan效果,它接受一个介于-1和1之间的数字,指定声音应该来自立体声频谱中的哪里(-1.0表示最左,1.0表示最右,0.0表示居中)。我们还使用TunePad中的rewind函数同时演奏左右小军鼓声音。如果我们不使用rewind,声音将一个接一个地演奏。
from random import randint
def snare_riser():
with bend(cents = 1000, beats = 16):
for i in range(4):
for j in range(8):
with pan(-1):
playNote(note = 2,
beats = pow(2, -i),
velocity = randint(85, 100))
# 倒回以便两个音符同时演奏
rewind(pow(2, -i))
with pan(1):
playNote(note = 3,
beats = pow(2, -i),
velocity = randint(85, 100))走得更远
我们可以为此示例添加许多其他效果。渐强的一些常见效果:
- 低通滤波器扫频,随着渐强加速而打开频率频谱
- 其他效果,如镶边器或移相器
- 添加摇摆或其他微妙的时机变化
- 使用音调乐器或其他打击乐声音而不是小军鼓
- 我们在这里介绍的基本模式的变化
当你尝试不同的变化时,创建新函数,以便你可以轻松地将它们放入你的下一个项目。