中级篇——节拍器

【疑惑篇】

拖动变量滑杆修改演奏速度。点击拍子记号的分子和分母,修改拍子数和音符种类。点击舞台中央的播放按钮,启动节拍器;再次点击播放按钮,停止节拍器。

视频演示open in new window

亲自操作open in new window

【线索篇】

案例分析

它们发生的场景是什么?

默认白色背景

每个场景中有哪些角色?

每个场景中的每个角色在做什么?

  1. 将速度变量改为滑杆显示,设置速度的取值范围。
  2. 点击拍子记号的分子,切换拍子数。点击拍子记号的分母,切换音符类型。
  3. 点击播放按钮,启动节拍器,角色变为停止造型,播放节拍音效,同时改变按钮颜色。
  4. 点击播放按钮,停止节拍器,恢复默认造型。

积木提示

当绿旗被点击

当角色被点击

移到x:(0) y:(0)

换成([造型1])造型

下一个造型

将[颜色]特效增加(25)

清除图形特效

造型[编号]

当接收到[消息1]

广播[消息1]

重复执行(10)次

重复执行

如果<>那么否则

停止[全部脚本]

([舞台])的[背景编号]

减法

除法

等于

建立一个变量

使用变量

击打([(1)小军鼓])(0.25)拍

休止(0.25)拍

将演奏速度设定为(60)

【解决篇】

当你学习某个乐器时,节拍器是你必不可少的练习工具。这个案例,我们就一起利用Scratch的音乐分类,制作一个简易的节拍器。

第一步,因为使用了默认背景,只需要把用到的角色添加进来。

这一次用到的背景全部利用画图工具绘制。

先利用圆形、直线、矩形和填充工具绘制按钮角色,其中包括播放造型和停止造型。

接着,因为拍子记号的分子和分母都可以通过点击进行切换,你可以将它们分为两个角色,利用文字和直线工具,写出各自可选的数字。

作为分子的拍子数有2、3、4、6、9拍5种造型。

作为分母的音符种类有二分音符,四分音符,八分音符和十六分音符4种造型。

第三步,使用指令积木实现程序。

1. 将速度变量改为滑杆显示,设置速度的取值范围。

使用节拍器时,需要设置节拍的演奏速度,在这里你可以使用变量来存储它。与设置电子闹钟类似,先新建一个名叫“速度”的变量,将显示类型修改为滑杆,再设置滑杆的范围为速度的范围值,30~260。

2. 点击拍子记号的分子,切换拍子数。点击拍子记号的分母,切换音符类型。

速度设置完成,接着来设置拍子记号的取值。前面我们已经将拍子记号的分子和分母分为两个不同的角色,并为它们绘制了不同的造型,用来代表不同的拍子数和音符类型。这两个角色的操作一样,点击角色后切换造型即可。

当绿旗被点击后,先将角色切换为默认的造型,例如拍子数为4拍,音符类型为四分音符。接着,将它们移到默认位置。

当角色被点击后,只需要使用下一个造型积木即可。

3. 点击播放按钮,启动节拍器,角色变为停止造型,播放节拍音效,同时改变按钮颜色。

按钮角色当绿旗被点击后,可以先将角色切换为默认的造型,再将它移到默认位置。

接着,就是这个案例中最重要的一步,如何演奏节拍?

在思考这个问题之前,你可以先思考另外一个问题。启动节拍器后,你需要根据用户在前两步设置的速度、拍子数(分子)和音符类型(分母)来演奏节拍,你要如何获取用户设置的值呢?

速度值很简单,它本身就是一个变量,可以直接使用速度变量的变量值。

拍子数和音符类型呢?我们前面使用了不同的造型来表示拍子数和音符类型,你要如何将用户选择的造型变为具体的拍子数和音符类型值使用?

在这里有一种简单的处理方式,在最开始绘制造型时,你可以把造型名称改为对应的拍子数和音符类型。

例如,2拍的造型名称就叫2,3拍的造型名称就叫3,以此类推。

音符类型也类似,四分音符的造型名称就叫4,八分音符的造型名称就叫8,以此类推(这里的造型名称使用数字来表示,是为了在之后的演奏时,方便计算对应的演奏拍数)。

此时,你可以将这两个角色的造型名称想象成自己新建的两个变量。当角色切换造型时,也就在改变它们的变量值。

现在已经有了用户设置的速度、拍子数和音符类型,接着就可以来思考,如何利用它们演奏节拍器?

节拍器的速度设置很简单,使用音乐分类的将演奏速度设定为(60)积木,参数设置为“速度”变量即可。

拍子发出的声音,可以选用击打([(1)小军鼓])(0.25)拍积木中的声音。我在案例中选用了(12)铁三角和(10)木鱼代表强拍和弱拍发出的声音。

确定好声音后,具体如何演奏呢?

你可以先实现演奏4/4排作为试验。在4/4拍中每小节有4拍,就需要使用4次击打([(1)小军鼓])(0.25)拍积木。其中第一次是强拍,参数选择(12)铁三角,后3次是弱拍,参数选择(10)木鱼。

接着是每拍的演奏时长,我们需要以四分音符为1拍进行换算,4/4拍中正好是以四分音符为1拍,所以每个积木都需要演奏1拍。

一个小节演奏的效果就像下面这样。

确定好一个小节之后,剩下的就是让节拍器不停的重复演奏即可。

上面演奏的是4/4拍节奏,接下来你还可以尝试换一个拍子,例如3/8拍,从而比较一下他们有什么规律。

在3/8拍中每小节有3拍,需要使用3次击打([(1)小军鼓])(0.25)拍积木。其中第一次是强拍,参数选择(12)铁三角,后两次是弱拍,参数选择(10)木鱼。

3/8拍中是以八分音符为每一拍,也就是四分音符的一半,所以每个积木都需要演奏0.5拍。剩下的同样是使用重复执行积木重复演奏。

观察上面两个指令串,你会发现拍子记号的分子(拍子数)就是需要使用的击打([(1)小军鼓])(0.25)拍积木的次数,每小节的第一拍为强拍,剩下的为弱拍。

现在你就可以尝试一下,能不能利用之前获取的拍子数值,将上面两个指令串进行合并?

演奏时,第一次演奏(12)铁三角,剩下的次数都是演奏(10)木鱼。剩下需要演奏多少次呢?是不是(拍子次数-1)次。别忘了,拍子次数是用分子角色的造型名称来代替的,需要使用([舞台])的[背景编号]积木获取。

现在已经可以正常演奏每小节的拍子次数,接下来继续观察,如何修改不同音符类型演奏的拍数(时长)?

实际上,相邻的音符类型之间拍数(时长)都是2倍关系。例如,四分音符是1拍,八分音符就是四分音符的一半,0.5拍。十六分音符就是八分音符的一半,0.25拍。四分音符又是二分音符的一半,所以二分音符就是2拍。

在之前修改造型名称时,我们已经把它们的名称分别设置为2,4,8,16,正好就是2倍关系。现在你只需要用4作为单位1,分别除以不同造型名称使用的数字,就可以算出不同音符类型的演奏拍数(时长)。

以上的操作需要你懂得一些基本的乐理知识,你可以参考我的少儿编程Scratch3.0教程——扩展篇(音乐)open in new window教程进行学习。

上面的指令串我们只是完成了节拍器的演奏部分。你还需要考虑,它是什么时候开始演奏呢?是不是播放按钮角色被点击时,并且你还要将角色的造型换成停止造型。你还可以使用休止(0.25)拍积木,在点击按钮后增加1拍的停顿,使节拍器启动时不会显得太急促。

为了让节拍器演奏时舞台画面不会显得太死板,你还可以修改按钮角色的颜色特效,每演奏1拍就让角色变换一种颜色。

5. 点击播放按钮,停止节拍器,恢复默认造型。

最后一步,当节拍器正在运行时再次点击按钮角色,节拍器就会停止。这里你需要思考的问题是,每次点击按钮后,如何判断是应该启动节拍器还是停止节拍器?你能想到哪些处理方式?

是不是可以新建一个状态变量进行判断?是不是也可以利用按钮角色当前的造型编号进行判断?

当角色被点击后,如果造型编号=1,那么就启动节拍器;否则就停止节拍器。

接着你可以把上一步完成的演奏节拍的指令串直接放入如果<>那么否则积木中。或者,你还可以通过广播消息的形式,通知角色完成不同的操作。

最后,停止节拍器时需要做些什么?

你需要停止正在演奏的脚本,把造型换成默认的播放造型,最后别忘了清除已经改变的颜色特效。

以上,你就通过Scratch的音乐分类自己制作了一个节拍器。

你在按照上面的步骤完成后,可以自己尝试着使用其他方法来重新实现它。例如,通过建立两个变量,节拍记号的分子(拍子数)和分母(音符类型),来代替上面使用的造型名称。或者使用询问和回答的方式让用户填入速度和节拍。或者你可以增加一个练习倒计时或者练习计时器。或者你还可以设计一种更好看的节拍器演奏效果。这些就留给你来自己完成了。

想看更多学习案例,欢迎点击查看《Scratch 3学习手册》open in new window

想要获取所有案例源码和素材,以及获得我对你在学习中所遇问题的一对一解答,欢迎加入石头解忧杂货店