作为一个吉他爱好者,盗匪一直想拥有一个节拍器,可苦于银子太少,节拍器又太贵,所以……但是一个有头脑的闪虫是不会被这点小困难吓倒的,今天我们就用Flash来DIY一个机械节拍器。
在制作之前,我想还是先解释一下什么是节拍和节拍器。
节拍是指强拍和弱拍的组合规律。有很多有强有弱的音,在长度相同的时间内,按照一定的次序反复出现,形成有规律的强弱变化,例如:每隔一个弱拍出现一个强拍,这是一种节拍;而每两个弱拍再出现一个强拍时,又是另外一种节拍。同时节拍也是有一定频率的,如果在乐曲中追求的速度是每分钟60拍,那么每秒就是一拍(半拍是1/2秒),如果要求的是每分钟120拍,那么每拍就是1/2秒(半拍为1/4秒)以此类推,这个被称为拍子的时值。
节拍器就是通过不同的声音来反映强拍和弱拍的一种辅助工具,在乐器的练习中被广泛的使用,今天我们模拟的这种机械节拍器是通过调节摆的重心(摆锤高度)来改变节拍的频率(时值)的,使用起来非常方便。
点击play按钮开始运行,拖拽摆锤改变摆的重心,在右下角的文本框中可以观察频率的变化,修改左下角的数字可以改变每小节的节拍数。
一、制作原理和思路
从上面的介绍中我们可以看出节拍器有两个重要参数:时值(或者说是摆的频率)和节拍(每小节的节拍数)。时值可以通过调节摆的重心来改变,节拍我们可以在场景中安排一个输入文本框(input text),通过向文本框中添入数值的方式来获得节拍值。
改变摆锤的高度可以用拖拽(startDrag)来实现,然后将摆锤的高度值简单地转化为一个合适的角度值(就是我们后面将会提到的_root.tr),按下开始按钮后,利用帧的循环使摆的旋转角度(_rotation)不断地与_root.tr进行相加运算以达到增大摆的偏角的目的,同时判断摆的角度是否满足了我们规定的最大角度,如果是,那么播放声音同时改变_root.tr的正负值,使摆向相反的方向摆动,这样不断地循环下去,直到按下了停止按钮;摆动的同时还要计算摆动的次数,用以判断是该播放强拍的声音还是应该播放弱拍的声音,这就需要在当摆达到了最大角度,我们在播放声音,改变角度的正负值的同时,使变量累计次数(_root.sum)进行自加运算,并判断是否与场景中的输入文本——节拍 的数值相等,如果不相等则播放弱拍并继续累加,如果相等就播放强拍并使累计变量复位以开始新计数好。
二、制作中用到的几个Action Script(AS)语句解释
① movieClip.startDrag([lock ,left ,top ,right,bottom])
使电影剪辑(MC)允许拖拽;
lock可以是true或false,代表是否在拖拽时将MC的中心锁定到鼠标指针上;
left ,top ,right,bottom可以是任意数值,代表拖拽的范围,应该注意的是顺序不能改变并缺一不可,但如果不需要拖拽范围可以集体被省略。
②movieClip.stopDrag()
禁止电影剪辑的拖拽行为。
③Math.round(Number)
对数值进行取整运算。