带孩子们做 Scratch 项目时,我经常发现一个现象:很多同学会把“声音”这个分类当成配角,以为它无非是“播放一段背景音乐”或者“点错了就停止”。可当你真正开始做互动游戏、探险小故事,或者想让角色“活”起来的时候,音效才是最容易被忽视又最容易出效果的部分。今天这篇想单独拎出两个积木来聊:左右平衡音效和清除音效。前者能让你做出“声音从左边飘过来”的空间感,后者则负责在你施了一堆音效魔法后恢复原状。这两个积木搭配使用,能让作品的声音质感立刻上一个大台阶,特别适合正在带学生做游戏设计、声音互动项目的老师,也适合想自己把声音模块用明白的 Scratch 爱好者。
1. 左右平衡先弄明白:这不是“调音量”,是“调声音的方向”
1.1 左右平衡到底是一个怎样的效果
先说过得去的类比。大家听歌的时候,如果戴耳机,会发现歌手声音在正中间,吉他可能在左边,鼓点可能在右边。这种“声音从哪个耳朵方向过来”的感觉,靠的就是左右声道分配。Scratch 里“左右平衡”这个音效,做的就是类似的事情:它决定一个声音在左右耳机或左右扬声器之间的分配比例。
在中文版 Scratch 里,积木是长这样的:
将 [左右平衡 v] 音效设为 (0) 将 [左右平衡 v] 音效改变 (10)“改变”版本就是在原来基础上加多少,“设为”版本则是直接跳到指定值。很多初学者第一次看到这个积木,第一时间反应是“这跟音量有什么区别?”其实区别很大:音量管的是“响不响”,左右平衡管的是“从哪边响”。你把音量调到 0,声音直接没了;但你把左右平衡调到极左值,声音还在,只是听起来完全从左边耳机传出来。
这个效果非常实用,尤其是做和“位置”有关的游戏时。比如说角色在画面左边移动,匹配的音效就应该偏向左声道;角色跑到右边,声音跟着偏右。这个感觉就像你闭着眼睛,光靠耳朵就能判断出声音源的大致方向。
1.2 左右平衡的数值范围和实时特性
左右平衡的取值范围,标准情况下是从 -100 到 100,0 是正中间,也就是左右声道分到相同音量。实际积木里并不限制只能输进 -100 到 100,你可以输入更大或更小的数字,但听感上超过一定数值后基本就完全偏向一边了,所以日常按 -100 到 100 用就行。
这里有一个特别值得注意的特性:Scratch 的音效是“跟随角色”的实时参数,不是一次性效果。什么意思?就是当你播放一个声音的中间过程改变左右平衡数值,正在播放的声音会立刻偏过去。你可以试一个简单的实验:放一段循环声音,然后用一个滑块或者键盘按键实时调整左右平衡,声音会像在你两耳边游走一样。
这种实时性,是左右平衡最有魅力的地方。以前我带学生做游戏,有个同学提出了一个很有意思的用途:做一个“追踪导弹”音效,导弹从左边发射,飞向右边的时候音效也快速从左边扫到右边,配合动画特别带感。这个效果不需要多复杂的积木,核心就是不断改变左右平衡的数值。
1.3 怎么让左右平衡跟着角色 X 坐标走
在游戏里,最自然的用法是让左右平衡跟角色的 X 坐标挂钩。Scratch 的舞台 X 坐标范围是 -240 到 240,而左右平衡的理想范围是 -100 到 100。如果直接把 X 坐标填进左右平衡积木,当角色站在舞台边缘时,数值会超出正常范围,虽然不会报错,但声音早就全偏到一边了,等于浪费了中间一大段的“渐变区”。
更合理的写法是用比例换算:
将 [左右平衡 v] 音效设为 ((角色的X坐标) / (2.4))240 除以 2.4 等于 100,这样角色站在最左边时左右平衡是 -100,站在最右边是 100,站在中间是 0。换算刚好把舞台宽度映射到左右平衡的完整取值范围上。
如果想要“声音方向”跟角色位置成反向关系,也很简单,在前面加一个负号或者用“0 - 结果”。这一步看似不起眼,实际决定了声音定位和视觉位置是否匹配。很多同学直接写 X 坐标进去,结果发现角色只走了一小段路,声音就已经完全偏到右声道了,问题就出在没做映射。
2. “清除音效”的作用范围、优先级和易混点
2.1 清除音效具体会清除掉什么
再来看另一个常见积木:清除音效。
清除音效这积木只有一条,没有参数,看起来特别简单。但它容易让人误会,因为很多新手以为它会“停止所有声音”,就像“停止所有声音”积木那样。实际完全不是一回事。清除音效的作用是:把当前角色的所有音效恢复默认值。默认值具体就是:音调恢复成 0,左右平衡恢复成 0,音量音效恢复成 100。
注意,“音量音效”和“音量”两个字面容易混淆。Scratch 里有两套音量相关设置:
- 一套是“将音量设为 (100)%”,这是直接控制整体输出音量;
- 另一套是“将 [音量 v] 音效设为 (100)”,它走的是音效通道。
清除音效恢复的是第二套的数值,不会把第一套“音量设为多少”拉回原来的状态。也就是说,如果你用一个公开的音量滑块把角色音量调成了 30,再点清除音效,音量滑块的值还是 30,声音不会突然回到满格。真正被恢复的,是当前角色在这局游戏里累积的音效偏移。
为什么我要强调这点?因为在 Scratch 里,音效属于角色的一种“状态值”,它会一直保留,除非你重新设置或清除。比如你把某个角色的左右平衡改成了 100,然后换到另一个场景,如果没有清除音效,下一次这个角色再发出声音,依然是从右边响。这种“持久性”很容易被忽略。
2.2 它和“停止所有声音”“音量设为 0”的差别
我见过不少课堂案例里,学生想在某一关结束时把音效“复位”,顺手拖了“停止所有声音”,结果下一关声音确实停了,但音效偏置还留着,下一关一有声音,效果就怪怪的。
把它们放在一起对比就清楚了:
| 积木 | 是否停止正在播放的声音 | 作用范围 | 是否恢复音效默认值 |
|---|---|---|---|
| 清除音效 | 否 | 当前角色 | 是 |
| 停止所有声音 | 是 | 所有角色和舞台 | 否 |
| 将音量设为 0% | 否,声音继续播放但听不见 | 当前角色 | 否(只是音量被固定) |
清除音效适合的是“声音还在播,但效果参数要归零”的场景。例如一个循环播放的警报声,前面把音调调得很高,现在想让警报声恢复正常音高,直接用清除音效就可以了,不需要重新播放一遍声音。
“停止所有声音”则适合“彻底切断一切声音来源”的场景,比如游戏切换到暂停菜单。两者用途不同,如果混用,就会出现“声音停了但效果没清”或者“声音继续响但效果突然清零”的错位感。
2.3 清除音效最容易被忽略的应用时机
在实际项目中,我通常会在三个地方提醒学生加“清除音效”:
一是游戏每一局的开始。因为上一局结束时,音效可能是乱七八糟的状态,这个角色可能左右平衡偏 80,音调也高了一个八度,不清理的话会影响新一局的体验。
二是播放“一次性怪声”之后。比如一个角色被击中时发了一个恐怖音效,音效里把音调压低了很多,用完不清,角色之后再说台词,声音还是低沉的,就非常跳戏。
三是克隆体出生时。这一点特别容易踩坑。克隆体会继承本体的很多属性,好像音效也会被带过去。如果你用本体做了一个“左右平衡在变化”的音效演示,之后生成了克隆体,克隆体身上带着同样的左右平衡偏移,结果它一发声,声音方向就不对劲。在克隆体生成后的开头加一个“清除音效”,能避免很多莫名其妙的音效串扰。
3. 教室实战:“声音捉迷藏”的课程设计案例
3.1 课例玩法和核心目标
很多老师问我,左右平衡这么抽象,怎么让孩子一下子听懂、还能用上?我的建议是做一个“声音捉迷藏”小游戏。玩法非常简单:一个主角角色蒙着眼找目标,画面上只有一片黑或者雾蒙蒙的背景,玩家用左右方向键移动主角,目标是找到某个固定位置的目标物。
视觉线索尽量少,主要依靠声音提示。主角在目标左边时,目标发出来的声音应该从右边传来;主角在目标右边时,声音从左边传来;主角正对目标时,声音居中,而且音量最大。这样一来,左右平衡负责“方位”,音量负责“距离”。
这个项目的教学目标非常集中:让学生理解左右平衡和坐标的映射关系,同时引出清除音效在关卡重置中的用处。整个过程不需要复杂的角色动画,重点全在声音模块上。
3.2 分步脚本搭建
第一步,先做一个会“持续发声”的目标角色。目标角色用一个简单的圆形或者星星就行,给它播放一个循环的滴答声或透视音。注意这个角色要一直播放声音,不能停。用“播放声音 [滴答声 v]”这种不等待的积木,放在重复执行里。
第二步,主角角色负责接收键盘左右键:
当按下 [左箭头 v] 键 将X坐标增加 (-5)第三步,最核心的一段积木放在主角上:
当 ⚑ 被点击 重复执行 将 [左右平衡 v] 音效设为 (((目标X) - (角色的X坐标)) / (2.4)) 将 [音量 v] 音效设为 (距离决定音量的公式) 播放声音 [接收提示音 v]这里的“目标X”是一个变量,游戏开始的时候把它设成目标角色所在的 X 坐标。目标角色 X 坐标可以通过“目标角色的X坐标”直接获得,但为了让学生理解“变量记录位置”的思想,我会让他们事先存一遍。
左右平衡公式很容易解释:主角在目标左边,目标X减主角X得到一个正数,除以 2.4 后变成正数,声音偏右,正确。主角在目标右边,结果变成负数,声音偏左,也正确。当场测一下,学生马上就能感觉到“耳朵追踪方向”的体验。
音量距离部分的公式可以简化:
将 [音量 v] 音效设为 ([100] - ([绝对值 v] 运算 ((角色的X坐标) - (目标X))))减去距离绝对值,越近音量越大。如果直接用角色和目标的距离,Scratch 里有个“距离”积木,也能达到类似效果。
3.3 课堂扩展方向
这个案例的扩展空间很大。想让关卡重置更完整,就在每次游戏开始时给主角和目标角色都加上“清除音效”,尤其要放在目标开始循环发声之前。不然上一关你玩的音效偏移会带到新一关。
等学生熟练后,我一般会让他们挑战两个变式:
变式一:把条件反过来,变成“离目标越近声音越低沉”,利用音调效果。这样三个音效(音调、左右平衡、音量)就全部练到了。
变式二:增加第二个目标,两个目标发出不同的声音,主角要分辨哪个声音来自左边,哪个来自右边。这个变式对立体声听感的锻炼很有效,课堂上学生会兴奋得不得了。
4. 不只是平移:左右平衡和清除音效组合出的声音层次感
4.1 用“位置变化”加“音量变化”模拟靠近感
单一使用左右平衡,只能传达“方位”,但真实的声音世界里,方位和距离往往是同时变化的。物体靠近你时,声音不光会从某个方向传来,还会越来越响;物体飞远时,声音变小,同时方向感也更模糊。
在 Scratch 里实现这种感觉,最简单的组合就是左右平衡加音量音效同时变化。我做射击类小作品时常用这套逻辑:子弹从左边角色的枪口发射,飞向右边目标,子弹声音的左右平衡在左右声道之间扫过,同时音量逐渐降低,模拟“子弹飞远了”的效果。
关键脚本放在子弹角色里:
当作为克隆体启动时 将 [左右平衡 v] 音效设为 (-100) 将 [音量 v] 音效设为 (80) 重复 (20) 次 播放声音 [嗖 v] 将 [左右平衡 v] 音效改变 (10) 将 [音量 v] 音效改变 (-4)这个设计里,播放声音积木放在循环里不一定能保证每次都重新播放,实际调整时可以把“播放声音”放在循环外面,依靠左右平衡的实时性来改变效果。因为前面提过,左右平衡变化能作用于正在播放的声音本身。
音调也可以一起用。越远的声音听感往往更“闷”更低,你可以把音调效果也下降一段。三个音效同时作用,声音的层次感立刻就出来了。
4.2 做一个“从左边飞到右边”的扫频音效
很多学生喜欢做雷达、警报、魔法阵之类的效果,这类效果特别适合用左右平衡来做“扫频”。原理很简单:让左右平衡按照一定节奏从 -100 变化到 100,再反过来。
可以用计数器:
将 [左右平衡 v] 音效设为 (50) 重复执行 将 [左右平衡 v] 音效设为 ([-100] 到 [100] 的随机数)但随机数会让人觉得跳来跳去,不适合模拟平滑移动。更自然的办法是用变量做动画插值:
将变量 [声向 v] 设为 (-100) 重复 (200) 次 将 [左右平衡 v] 音效设为 (声向) 将 [声向 v] 增加 (1)当声向到了 100 之后,再反向减回去,就能得到一个反复横扫的声源。配合一个低沉的持续声音,雷达站的感觉一下就出来了。
这种扫频音效结束之后,千万别忘了用“清除音效”把左右平衡复位。因为如果你一直扫,扫到 100 停下来,之后这个角色再发声,声音就一直停留在右边,玩家会以为是耳机坏了。
4.3 多角色音频隔离:清除音效的“边界感”
上一个内容里其实还藏着一个很实用的技巧:Scratch 的音效参数是逐角色独立的。你在 A 角色身上把左右平衡设成 100,不影响 B 角色,B 角色播放声音还是正常的。这个特性意味着你可以放心地用某一个角色承载“背景音乐”或“环境音效”,用另一个角色承载“对话音效”和“动作音效”,互不干扰。
我记得有一次带学生做“森林探险”作品,背景音乐放在舞台区,鸟叫声放在指定的鸟角色上,脚步声放在主角上。当时就有同学担心,如果主角的左右平衡一直随着移动改变,会不会导致背景音乐也跟着左右飘?实际上不会,因为背景音乐和主角音效属于不同的角色,主角的左右平衡变化只作用于主角自己的声音。
这个特性也反过来提醒我们:当你清除某个角色的音效,只会清除它自己的状态,不会把舞台或其它角色的音效一起清掉。如果你想让整个作品的所有音效全部归零,就得给每个相关角色都发一条“清除音效”的消息,或者用广播来做统一管理。
5. 声音模块容易走的三个弯路:我的排障记录
5.1 设置了左右平衡,但声音一点没变
这是最高频的问题,几乎每次课堂上都会出现。排查的时候先不要看复杂的脚本逻辑,按顺序问自己三个问题:
第一,左右平衡积木是不是放在“正在播放声音的那个角色”身上?如果声音是舞台区播放的,你在某个角色身上设左右平衡,当然没用。因为这个音效参数绑定在角色上,舞台区的声音不受角色音效影响。
第二,是不是在用外放喇叭听?笔记本自带的扬声器、普通桌面音箱,尤其是单声道的设备,左右平衡几乎听不出区别。这个效果必须用耳机或者左右分明的音箱,才能明显感知。我一般会让学生在测试这个积木时先戴上耳机,否则改了参数也“听不见”,容易被误判成代码失效。
第三,左右平衡是不是被后面的积木覆盖了?有时候学生设置好左右平衡,又在后面加了一个“将左右平衡音效设为 0”,两种设置打架,结果永远停在 0。
常见解决方式就是:把设置左右平衡的积木放在循环里,并且只在需要改变时才重新计算,避免覆盖。
5.2 “清除音效”和“停止所有声音”傻傻分不清
有一个学生做过一个音乐播放器,用了“停止所有声音”来切换歌曲,结果发现老歌停了但角色的音调效果还留在上一次的高音状态。他问我:为什么停止了声音,效果还在?
原因就是我们前面说的:停止所有声音只是切断播放,不负责重置参数。正确流程应该是:先“清除音效”,再“停止所有声音”,然后再播放新声音。顺序颠倒一下都没关系,只要两个都用上。
如果是切换背景音乐,我还会建议在“清除音效”之后再设置一次音量,确认当前角色音量处于你想要的范围。因为上一首歌可能把音量音效调到很低的数值,清除音效只会把它恢复成 100% 默认值,如果你的游戏本来就需要 50% 音量,那就需要重新设一遍。
5.3 音量音效和音量积木混在一起,调半天找不着原因
再举一个很典型的排错案例。一个同学做了一个“靠近目标音量变大”的效果,他用的是“将音量设为 (40)%”这个积木,然后搭配左右平衡,希望在主角靠近目标时音量变大。结果发现音量纹丝不动。
原因在于“将音量设为 (40)%”控制的是全局音量输出,而游戏里的音量效果走的是“将 [音量 v] 音效设为”这条路。两者虽然名字都带音量,但作用层次不一样。想要让音效根据位置变化,必须用在“音效”下拉菜单里选“音量”的版本。
正确的做法是:
将 [音量 v] 音效设为 (根据距离算出来的数值)而不是:
将音量设为 (40)%这个错误很容易排查,但也很容易反复踩。我建议在教案里专门留两分钟讲区别:一个是“整台电脑的音量大小”,一个是“当前角色声音的效果参数”。用这个角度一讲,学生基本就不会混了。
写在后面
做声音模块的教学,跟做一般编程教学有个明显不同:效果好不好,用眼睛看不出来,必须靠耳朵去听。所以每次做完带音效的作品,我都会要求学生先戴上耳机、闭上眼睛,把所有视觉线索遮起来,专门听一遍声音逻辑是否合理。只要声音方位和画面方位一致、关卡重置后音效干净清爽,左右平衡音效和清除音效这两个积木就算真正学通了。接下来想怎么配,就看大家的创意能飞多远。