间奏10:鼓机功能
间奏10:鼓机功能
概述
创建鼓模式和节奏的一种常见方法是使用步进音序器。步进音序器将时间分成均匀的切片或步骤(如16分音符或32分音符)。这台1980年代的Roland 808鼓机让音乐家可以用16个开关编程节奏,代表各种鼓声音将被演奏的时间。现代步进音序器使用网格,其中每行是不同的鼓声音,每列是连续的时间切片。在本间奏中,我们将在TunePad中用Python代码制作自定义鼓机。你可以在线跟随这个TunePad项目:https://tunepad.com/interlude/drum-machine
步骤1:机器功能
我们将在Python中使用我们自己的称为machine的函数来制作鼓机。我们的函数将使用字符串为每个鼓创建声音模式。我们还需要一个称为moveTo的TunePad函数,它让我们可以通过将拍计数器移动到我们想要的任何位置来快进或倒回时间。通过在项目中创建新的鼓乐器并开始输入此代码:
def machine(note, pattern):
moveTo(0)
for s in pattern:
if s == '!':
playNote(note, beats=0.25, velocity=100)
else:
rest(0.25)这个函数只有七行长,但有很多内容。让我们将它分解成更容易的片段。
- 首先,函数接受两个参数,note和pattern。note参数只是一个表示要演奏的鼓声音的数字(如0代表底鼓,2代表小军鼓,或4代表踩镲)。pattern参数是在Python中称为字符串的东西。我们可以使用字符串包含字符的组合。例如,在这个字符串中,“Hello, I’m a string”,有18个字符,从”H”开始,到”g”结束,包括空格。Python使用双引号(“)或单引号(’)来定义字符串。
- 函数的第一行使用moveTo移回小节的开始。当我们对machine进行多次调用时,我们将看到为什么这很重要(如下)。
- 接下来,machine函数使用for循环一次遍历字符串中的每个字符。这与我们用于踩镲的计数循环略有不同。这个循环遍历字符列表而不是数字列表。
- 第4行有一个称为条件语句或if-then-else语句的语句。我们要做的是说如果字符是”!“,演奏声音真的响(velocity = 100)。否则,休止。在一分钟内,我们将重新审视这一点,也让我们可以演奏安静的拍子。再次注意,我们使用冒号字符和缩进来设置代码块。
步骤2:使用机器功能
好的,但我们如何使用这个功能?这是一个有五种声音的简单示例节拍。每次对machine的调用就像鼓机中的一行。我们使用”-“字符表示没有声音,但实际上这可以是除”!“之外的任何字符。
machine(8, "------!!--------") # 通鼓1
machine(6, "--------------!-") # 通鼓2
machine(10, "-------!!!------") # 拍手
machine(4, "-!!!-!!!-!!!-!!!") # 踩镲
machine(2, "----!----!!-!---") # 小军鼓
machine(0, "!!------!!!!----") # 底鼓步骤3:响亮和轻柔的鼓声音
那么,如何同时有响亮和轻柔的声音以为我们的节拍添加一点纹理?为此,我们添加一个称为elif的新语句,代表(“else if”)或(“otherwise if”)。这与以前的函数相同,但我们正在重新定义它以将字符识别为不同的音量指标。尝试用此代码替换你的原始machine函数:
def machine(note, pattern):
moveTo(0)
for s in pattern:
if s == '!':
playNote(note, beats=0.25, velocity=100)
elif s == '*':
playNote(note, beats=0.25, velocity=80)
else:
rest(0.25)这是我们鼓节拍的最后一个版本,既有响亮也有轻柔的音符。按播放按钮听听它听起来如何。尝试更改Python字符串以创建不同的节拍模式。
machine(8, "------!*--------") # 通鼓1
machine(6, "--------------!-") # 通鼓2
machine(10, "-------!*!*-----") # 拍手
machine(4, "-*!*-*!*-*!*-*!*") # 踩镲
machine(2, "----!----**-!---") # 小军鼓
machine(0, "!*------!*!*----") # 底鼓