首页 » 父与子的编程之旅:与小卡特一起学Python » 父与子的编程之旅:与小卡特一起学Python全文在线阅读

《父与子的编程之旅:与小卡特一起学Python》19.4 控制音量

关灯直达底部

可以使用音量控制开关来控制计算机上的声音音量。在 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 等待歌曲结束

这个代码会播放一次歌曲,接下来播放音效,然后程序会结束。