可以使用音量控制开关来控制计算机上的声音音量。在 Windows 系统上,这是利用系统托盘里的小扬声器图标完成的。这个设置会控制计算机上所有声音的音量。你的扬声器本身可能也有一个音量控制杆。
不过除此以外,我们还可以控制 Pygame 发送到计算机声卡的音量。
好在我们可以单独控制每个声音的音量,例如,可以让音乐音量小一些,让“啪啪”声更响一些。
要设置音乐的音量,需要使用 pygame.mixer.music.set_volume
。而每个声音对象都有一个 set_volume
方法。在第一个例子中,声音对象的名字是 splat
,所以我们使用了 splat.set_volume
。音量是一个介于 0 到 1 的浮点数;例如,0.5 就是最大音量的 50% 或一半。
现在试着在同一个程序中播放音乐和声音。先来播放一首歌曲,在最后再播放“啪啪”声。还要把声音的音量调低一下。我们把音乐的音量设置为 30%,“啪啪”声的音量为 50%。这个代码见代码清单 19-3。
代码清单 19-3 有音量调节的音乐和声音
试着运行这个程序,看看它的效果。
卡特注意到这样一个问题:程序一旦开始播放音乐,就会继续做下一件事,在这里就是播放“啪啪”声。为什么会出现这种情况呢?原因是:通常我们都是使用背景音乐,你肯定不希望程序只是“呆坐在那里”,一直等到整首歌都播放完之后才开始做事情。在下一节中,我们会让它按我们希望的方式工作。
播放背景音乐
背景音乐是指玩游戏时在背景播放的音乐。所以一旦开始播放背景歌曲,Pygame 必须做好准备来做其他事情,比如移动动画精灵,或者检查是否有鼠标和键盘输入。它不会一直等到歌曲播放完。
但是如果你想知道歌曲什么时候结束该怎么做呢?你可能希望等这首歌播放完就播放另一首歌或者另一个声音(就像我们现在要做的一样)。你怎么知道音乐什么时候结束呢?为此,Pygame 提供了一种方法:你可以询问 mixer.music
模块是否还在忙于播放一首歌。如果忙,就能知道歌曲还没有播放完。如果它不忙,说明歌曲已经结束。下面就来试一试。
要查看 music
模块是否在忙于播放一首歌,可以使用 mixer.music
模块的 get_busy
函数。如果它仍在忙,这个函数会返回值 True
;如果不忙,函数会返回 False
。这一次,我们要让程序先播放歌曲,然后播放音效,再自动结束程序。代码清单 19-4 显示了如何完成这些工作。
代码清单 19-4 等待歌曲结束
这个代码会播放一次歌曲,接下来播放音效,然后程序会结束。