码丁实验室,一站式儿童编程学习产品,寻地方代理合作共赢,微信联系:leon121393608。
Scratch中提供了声音及音符的播放功能,能够播放导入的音频文件或指定乐器的音符,并提供了混音的效果。但在实际使用中,还是需要解决一些技术问题的。
今天我们就来讨论一个非常常见的问题,即
各声音的分别控制问题
需求是这样的。
在程序中常需要同时播放多个音乐或音符。但存在的问题是如何在保持一个声音播放的同时,停止播放另一个声音。(例如背景音乐和前景效果)
我们先来看看Scratch为声音和音符提供了哪些积木。
我们可以自己试验一下“停播所有声音”的功能。结果是不管有多少声音在播放,都会被停止下来。包括所有角色中的所有声音及音符。显然,这个功能不能够符合我们的需求。

如何能够完成这个功能呢?

再研究一下积木,我们会发现有两个控制音量的积木。

啊哈,音量为0是不是就没有声音了呢?
那么我们是否可以通过控制音量来完成这个功能呢?
我们做小程序试验一下,两个角色播放不同的声音,分别控制音量(程序略)。可以发现,每个角色都是有自己的音量的,两个角色之间互不影响。这样,只要将播放某音频角色中的音量设置为0,就可以不再出声了。
注意
实际上这里我们已经偷换了概念,原来的需求是停止播放声音,现在我们的方法是将音量设置为0(也就是静音)。严格来说,这两者是有区别的,我们并没有真正的停止播放,只是让用户听不到播放的声音了。但对于一般的需求来说,这样的解决方案还是可以接受的。
下面我们基于这个方法,做一个简单的音乐程序,即
随按键的时间长短播放音符
这里也采取一个简单的方式,即每个角色都长时间地播放一个音符(当然,也可以自己使用其它的方式处理)。之后,每个角色处理键盘事件,如果键盘按下,则将音量设置为100,否则,直到键盘放开,将音量设置为0(静音)。
这样就可以得到所需要的效果,按下一个键,长时间地播放一个音符,松手后,不再发出这个音符的声音了。
制作三个角色,分别演奏do,me,so(音符值分别为60,64,67)就可以播放出优美的和弦声了。注意,这个程序中需要选择能够发出连续声音的乐器(如小提琴,长笛等),如果选择钢琴、吉它等乐器,可能达不到需要的效果。
总结
1 使用控制音量的方式,比较完美地解决了播放中停止一个(或几个)声音或音符的问题。核心方法是让不同的角色播放不同的内容,再使用调节音量的方式分别控制。
2 如何能够通过软件提供的有限功能,来达到我们的目的,是一个挑战,对于我们使用有限的资源和功能来解决问题也是一个很好的锻炼。有的时候是需要另辟蹊径的。
3 如何通过制作小实例,来试验语言的功能及技术,也是一个重要的能力。