真要说Scratch声音模块里最容易被忽视的积木,我第一个提名“将左右声道设为”,第二个就是“清除音效”。很多人在声音面板里翻来翻去只认得“播放声音”和“停止所有声音”,做完项目能用上音量调节就已经算讲究了,左右平衡和清除音效常年吃灰。但这俩积木恰恰是做沉浸感、做音效定位、做游戏状态切换时最顺手的东西。这篇文章就把它们彻底讲透,包括参数到底怎么取、声音为什么会“移动”、清除音效和停止声音有什么区别,再附两个能直接抄走的实操小项目,适合带学生做互动游戏的老师,也适合自己玩Scratch做到声音表现力的朋友。
1. 声音模块里那一排积木,为什么我只挑这两个重点讲
1.1 左右平衡与清除音效在积木列表中的位置
打开Scratch的声音模块,积木分成两拨:一拨管播放,包括“播放声音”“播放声音等待播完”“停止所有声音”;一拨管效果,包括“将音量设为”“将音调设为”“将左右声道设为”“清除音效”。
音量大家都熟,音调也有人拿来做过变声器效果,唯独“将左右声道设为”和“清除音效”这两兄弟存在感最低。尤其左右平衡这个积木,默认值是0,很多初学者把它当作一个“填数值但不知道填了有什么意义”的积木,随手放着就不管了。清除音效就更惨,写不写好像都不影响项目运行,于是干脆不写。
但实际上,左右声道是Scratch里少有的能把声音“放”到某个方位的积木。它让声音不再是一个笼统的、从扬声器中央发出来的东西,而是可以偏左、偏右、甚至在左右耳朵之间滑动的可定位对象。清除音效则是所有声音效果的“复位开关”,音频参数一旦被改过,就必须靠它回到出厂状态。
1.2 这两个积木能解决的实际问题
先说左右平衡能干什么。做射击游戏的时候,敌人从左边来,枪声就应该从左耳响;角色走到舞台右侧,环境音就该偏右。做剧情动画的时候,角色在舞台左边说话,声像跟着偏左,观众就更容易把声音和画面绑在一起。这些东西用纯视觉也能提示,但加上听觉方位,代入感直接翻倍。
清除音效解决的是另一类问题:状态切换。一个角色泡在水里,音调变低沉;上岸之后,音调应该恢复正常。如果不做清除音效,低沉效果会一直挂在后续所有声音上,玩家就会觉得哪里不对劲。还有一些游戏里,Boss出场时声音被调得又尖又高,Boss被打败后如果不复位,连背景音乐都变成怪声。清除音效干的就是这件事,它是状态恢复的保险丝,也是防“音效污染”的清洁工。
这俩积木放在一起学,正好覆盖了声音效果的两面:一面是创造效果,一面是回收效果。只学创造不学回收,项目做到后面一定乱套。下面我先把原理讲清楚,再给完整实操,最后把常见坑都列出来。
2. 左右平衡音效的核心:参数、原理与实时控制
2.1 声道参数的范围、含义和能听出来的效果
“将左右声道设为”这个积木接受一个数值,有效范围是-100到100。0是默认值,意思是左右声道完全平衡,声音居中。负数意味着声音偏向左侧声道,越接近-100就越靠左;正数偏向右侧,越接近100就越靠右。
你直接把值设为极端值,比如-100,戴耳机听的时候会感觉声音完全从左边传来,右侧几乎无声。设为100就是完全从右边传来。设成中间值,比如-30,声音会明显偏左,但不至于丢掉右边。这个参数本质上控制的是声音的“声像位置”,专业术语里叫Pan,在音频剪辑软件、游戏引擎里都有类似的概念,Scratch只是把它简化成了一个数字。
需要注意一点,参数不是只能填整数,像“x坐标÷240×100”这样的算式也能填进去。这一下玩法就多了:你可以让声道值跟着角色的坐标实时变化,声音方位也会跟着角色位置连续移动。声音不是跳变式的“左一下、右一下”,而是像物体真的在空中划过一样平滑偏移。
2.2 为什么声音能在左右耳朵之间“移动”
这里涉及一个所有人都有体会但未必深究的生理听觉原理:人耳是靠音量差和时间差来判断声音方向的。如果一个声音在左侧响,左耳听到的音量比右耳大,到达的时间也比右耳早那么零点几毫秒,大脑就会判断“声源在左边”。左右平衡积木改的就是这个音量差:左声道音量加大、右声道音量减小,听起来自然就偏左了;反过来,两个声道一起往中间收敛,声音就回到正前方。
这个原理放在Scratch里理解特别直观,因为“将左右声道设为”操作的就是两个声道的相对音量。它没有真的改变声音文件的左右内容,也没有做复杂的空间音频计算,只是把音量在天平上拨来拨去。对青少年来说,这其实是个特别好的立体声知识启蒙:原来立体声不是“左边放一个喇叭右边放一个喇叭”那么简单,而是左右音量配比产生的位置感。
实操上要给三点提醒。第一,一定要戴耳机测试。笔记本自带的扬声器距离近、腔体小,左右分离度很差,有时候设置-100和50听起来差异不大;耳机一戴,差异立刻分明。第二,左右平衡效果只对正在播放或之后播放的声音生效,如果没有声音在播放,光设置这个积木是听不到任何变化的。第三,如果音源本身是最基础的单声道“哔哔”声,效果也明显,但换成一段立体声录制的音乐就没那么纯粹,体验最好的是音效素材而不是复杂混音。
2.3 边播放边调整声道的正确姿势
有很多人在用左右平衡时踩过一个坑:让角色一边播放短音效一边调声道,结果声音“嗒”一下就没了,根本听不出连续的位置变化。原因是短声音播放时间太短,声道还没来得及被耳朵感知就结束了。真正要做出连续移动的效果,需要一个持续时间足够长的声音源。
实操套路是这样:先用“播放声音等待播完”启动一段环境音、一段循环配乐或者一个长音效,然后在它播放期间反复执行“将左右声道设为某个算式”。最朴素的循环结构就是:
- 当绿旗被点击
- 重复执行
- 将左右声道设为(计算结果)
- 等待 0.1 秒
播放声音用“播放声音等待播完”包在一个重复执行里,就是让声音持续存在的基本方式。只要你让左右声道值连续变化,已经播出的声音也会跟着挪位置,实测下来绝大多数浏览器和桌面客户端都能即时生效。
这里有个隐藏极深的细节:不同声音同时播放时,声道是叠加到同一对扬声器上的。你让一个角色播背景音乐并设声道为-100,另一个角色播放枪声并设声道为100,听感上是一个声音在左、一个声音在右,两者互不干扰。这是Scratch音频层给的自由度,合理利用可以做出“左边下雨、右边打雷”的丰富场景。
3. 清除音效:一个被严重低估的“复位开关”
3.1 清除音效到底清的是什么
“清除音效”这个积木,官方解释是清除所有声音效果。所谓声音效果,在Scratch声音模块里主要指两类:音调效果和左右声道效果。
音调效果被改了之后,声音会变得尖锐或者低沉。如果你把音调从100调成200,原本的猫叫声能变成“电猫叫”;调成50,就变成慢速粗嗓版。左右声道效果改了之后,声音会偏左、偏右或者居中。这两类效果都属于“可累积、可重置”的状态。清除音效的作用就是一次性把音调恢复成100%、把左右声道恢复成0,回到什么都不改的原始状态。
它不会停止正在播放的声音。这一点特别容易让人误解:以为点了“清除音效”,现在嗡嗡响的声音就被切掉了。没有,声音还在播,只是音色和方位变回默认。如果你想既停止又复位,那就还得配合“停止所有声音”一起用。
3.2 和“停止所有声音”的配合顺序
什么时候先停止、后清除,什么时候反过来,取决于你想要的听感。
场景一:游戏被强制暂停,玩家需要安静。这时候应该先“停止所有声音”,再“清除音效”。因为玩家不希望清除音效之后,背景音乐继续播放哪怕半秒钟。停止是即时动作,清除是打扫房间。
场景二:角色状态从“水下”恢复为“陆地”,背景音乐还想继续放,不想被打断。这时候只执行“清除音效”就够了,音符不换、节奏不断,音调回到正常。如果你同时点了“停止所有声音”,背景音乐就从头再放,切换感太生硬。
我见过一个学生项目里写反了顺序:先“清除音效”再“停止所有声音”,导致清除后声音又开始播了那零点几秒才被停掉,听感上非常拖泥带水。这个顺序问题很小,但一旦关注到,能明显提升项目的音效干净度。
还有第三个常见操作:广播管理全局音效。当项目里有很多角色,切换场景时想恢复所有音频到初始状态,可以给一个中央角色写广播,各角色收到后分别执行“停止所有声音”和“清除音效”。这种集中式管理避免了每个角色各改各的、互相干扰的局面。
4. 两个能直接搬走的实操小项目
4.1 会随角色位置移动的环境音效
这个项目的思路特别简单:做一个能跟着角色跑的环境声音。假设舞台中央有一个角色,用鼠标拖动它左右移动,背景里有一段类似电流或鸟叫的持续声音,它的左右方位跟随角色坐标变化。
核心算式是这样的:舞台x坐标范围是-240到240,左右声道范围是-100到100,两者成正比,只要把x坐标除以240,再乘以100,就得到对应的声道值。当角色在最左边时x是-240,计算结果正好是-100,声音完全偏左;角色在最右边时是100,声音完全偏右;角色在中央时是0,声音居中。
积木组合可以这么搭:
- 当绿旗被点击
- 重复执行
- 将左右声道设为(x坐标 ÷ 240 × 100)
同时另开一段脚本负责播声音:
- 当绿旗被点击
- 重复执行
- 播放声音(环境音)等待播完
这样切到运行界面,拖角色左右移动,就能听到声音方位跟着角色走。第一次做出来的时候,很多学生会觉得神奇:明明声音文件没变,怎么听起来像有个东西在画面里飞。这个练习强化的是坐标系与参数的映射关系,顺便也练了运算积木的嵌套使用。
如果再讲究一点,可以在角色上下移动时联动音调:y坐标除以240,再乘以80,加上100,让角色越往上声音音调越高、越往下越低沉。上下影响音调、左右影响声像,声音就从两个维度“长”在角色身上了。
4.2 飞机过场动画的声像移动与音调联动
第二个项目更像一个“声效表演”。你可以建一个飞机角色,按下空格键后,飞机从舞台最左边滑到最右边,同时播放一段轰鸣声。轰鸣声的左右方位从一开始就偏左,随着飞机向右移动逐渐偏右,音调也可以从低慢慢拉高,做出一种飞机呼啸而过的感觉。
这个项目特别适合演示多普勒效应的粗糙模拟。飞机靠近你时声音更尖,飞远之后声音变闷。程序上就是把“重复执行”里的两项设置一起更新:
- 将左右声道设为(x坐标 ÷ 240 × 100)
- 将音调设为(100 + x坐标 ÷ 240 × 60)
当飞机在左边时,音调大约40,低沉厚重;到中间时接近100,正常;到右边时拉到160,尖锐呼啸。配合上左右声道从-100到100的变化,轰鸣声整个就是“从左后方冲过来再冲到右前方”的路径感。
做这个项目要留意:音调设得太低或太高都会导致部分音效听不清。我试过把音调直接设到300,声音变得又薄又刺耳,完全没有气势;设成负数,声音闷到几乎消失。经验值控制在40到160之间,既有效果又不至于丢失音色细节。
如果想让整体更精致,可以在飞机飞到舞台右侧时加一个“砰”的爆炸音效,并配合屏幕震动效果。这里特别适合用“停止所有声音”先把轰鸣掐掉,再播放爆炸音,不然两个音效叠在一起糊成一片。
这两个项目做完,左右平衡和清除音效的基本功就都练到了。第一个项目练实时映射,第二个项目练多效果联动和切换控制。我建议初学者至少完整做掉第二个,因为它在同一个流程里同时覆盖了声音“重新设值”和“清除复位”两个操作:先按坐标持续设左右声道和音调,飞机落地后先停止所有声音,再清除音效,然后播放一段安静的收尾音。
5. 常见问题排查与我的避坑清单
5.1 声道没变化?多半不是积木的锅
最容易被误报成“Bug”的问题是:左右声道设置了,但完全听不出偏左偏右。遇到这种情况,先别急着怀疑积木写错,按这个顺序检查。
第一,是不是在用耳机。外放时左右分离感弱,建议直接换耳机测试。第二,声音是不是太短。短促的“滴答”声在耳朵还没反应完就结束了,很难感知方位,换成长音效或循环背景音再试。第三,是不是中途根本没有声音播放状态。左右声道是作用在播放过程中的声音上的,如果声音已经播完,你把左右声道设成任何值,安静状态下也不会有反应。
还有一个隐蔽问题:浏览器和操作系统的声音输出设备被设成了“单声道混合”。有些电脑系统设置里开启了“辅助功能-单声道音频”,所有立体声信息都被合并了,这时候Scratch里设再极端的声音位置也没用。把这个开关关掉就能恢复。
5.2 音效越听越怪?先检查循环播放链路
有一种很常见的翻车现场:背景音乐一开始还很正常,循环播放几轮之后,突然变得又高又细,或者严重偏向一边,怎么调都调不回来。
原因几乎都出在“音调持续累加”上。只要你在某段逻辑里写了“将音调增加”,并且这段逻辑被执行了多次,音调就会一层层叠上去。比如每次角色跳跃都增加20的音调,跳了五下音调已经变成200了,背景音乐听起来直接变速成“小黄人”。左右声道同理,如果每帧都在“将左右声道增加”,最后的声像位置会越偏越远。
解决方案就是适时“清除音效”。最稳妥的做法是在每次进入一个循环片段之前,先清除一次。比如用“重复执行播放背景音乐”的场景,每次“播放声音等待播完”之前加一个“清除音效”,就能保证每一轮背景音乐都从原始音色开始,不受上一轮残留效果污染。
5.3 多角色混音时的声道管理
当项目里有多个角色都在播放声音,左右声道的管理就容易乱套。因为所有声音最终都输出到同一对扬声器,角色A设了声像偏左,角色B又设了声像偏右,听感是两边都有内容,但如果角色A和B各自按自己的坐标持续更新声道,就可能出现“声音方位互相拉扯”的效果。
我自己的惯例是:设一个专门的“音效管理员”角色,所有和方位有关的左右声道逻辑都集中写在那里。其他角色需要播声音时,直接“播放声音”就好,不碰声道设置;声道计算由管理员统一处理,根据每个角色当时的位置算出对应的声道值,再一次性设置。这个方法在多人协作的项目里格外好用——学生各做自己的角色,最后声音效果不会因为互相覆盖而乱掉。
还有一个值得说的细节:清除音效只影响执行了清除的这个角色自己的声音效果。在Scratch的实现中,声音效果的设置和清除可以理解成跟随角色脚本走的。一旦你全局播放的声音被某个角色调整过效果,想让全部声音复位,最好让那个调整的角色来执行清除,或者通过广播通知它执行。
6. 把这两个积木用在教学里的个人经验
最后分享一点带学生时的观察。左右平衡这个积木在教学里有一个天然优势:它把抽象的负数概念变成了马上能听出来的现实体验。很多学生一看到-100到100的数值区间就皱眉,但让他们亲手把“将左右声道设为-100”做出来,再和“设为100”对比听,负数大于还是小于正数这个概念就瞬间落地了。再结合坐标系映射,音量位置和x坐标的关系就打通了整数、范围、正负号三个知识点。
清除音效更适合用来讲“状态管理”。青少年写代码最爱在角色上加各种特效,但很少想到怎么还原。清除音效是现成的“还原积木”,教学生养成“改了什么,就要在合适时机还回去”的习惯,比单纯灌输编程思维有效得多。我见过一个学生给游戏里每个敌人设了不同的音调和声道,打起来确实酷,但换场景后背景音乐全乱套,他自己折腾了很久才发现是忘加清除音效。从那之后,他把清除音效当成每一个新场景开始前必写的初始化步骤,后面项目的音频部分再没出过问题。
如果要推荐一个固定的学习顺序,我建议先做个不涉及清除音效的纯左右声道项目,把“设置”练熟;再回头做一个需要切换状态的项目,把“清除”补进去;最后找一个多角色项目实践声音管理。三步走完,Scratch声音模块的音效应用这块就基本毕业了。这两个积木不难,但值得被认真对待——它们能让作品从“有声音”升级成“有听感”,这种体验上的提升,远比堆十个音效文件来得实在。