播放声音时,要从硬盘(或从 CD,或者有时从互联网)得到一个声音文件,把它转换成可以在计算机的扬声器或耳机上听到的声音。计算机上可以使用多种不同类型的声音文件。以下是比较常见的类型。
波形文件——文件名以 .wav 结尾,如 hello.wav。
MP3 文件——文件名以 .mp3 结尾,如 mySong.mp3。
WMA(Windows 媒体音频,Windows Media Audio)文件——文件名以 .wma 结尾,如 someSong.wma。
Ogg Vorbis 文件——文件名以 .ogg 结尾,如 yourSong.ogg。
我们的例子中打算使用 .wav 和 .mp3 文件。我们将要使用的所有声音都放在这本书安装目录下的 /sounds 文件夹中。例如,在 Windows 计算机上,就应该在 c:/Program Files/HelloWorld/examples/sounds 里。
在程序中包含一个声音文件有两种方法。可以把声音文件复制到保存程序的同一个文件夹中。Python 会在这里查找文件,所以可以在程序中直接使用这个文件的名,例如:
sound_file = "my_sound.wav"
如果声音文件没有复制到程序所在的同一个文件夹中,就必须把声音文件的位置明确地告诉 Python,例如:
sound_file = "c:/Program Files/HelloWorld/sounds/my_sound.wav"
举几个例子,假设你已经把声音文件复制到保存程序的文件夹。这说明,只要在例子中用到声音文件,你只会看到文件名,而不是文件的完整位置。如果声音文件没有复制到程序文件夹,就要把文件名替换为完整的文件位置。
如果使用这本书的安装程序来安装,那么这些例子的所有声音文件都已经在你的硬盘上了。否则,可以在本书的网站(www.helloworldbook2.com.)上找到这些声音文件。
启动 pygame.mixer
要播放声音,首先必须初始化(initialize)pygame.mixer
。还记得初始化是什么意思吗?指的是开始时让某个东西做好准备。
让 pygame.mixer
做好准备很容易。只需要在初始化 Pygame 之后增加一行代码:
pygame.mixer.init
所以,使用 Pygame 处理声音的程序中最前面几行代码应该像这样:
import pygamepygame.initpygame.mixer.init
现在我们已经做好准备可以播放声音了。这些程序主要使用两种类型的声音。第一种是音效或声音片段。这些声音往往很短,通常保存在 .wav 文件中。对于这种类型的声音,pygame.mixer
会使用一个 Sound
对象,如下:
splat = pygame.mixer.Sound("splat.wav")splat.play
另一种大量使用的声音是音乐。音乐大多存储在 .mp3、.wma 或 .ogg 文件中。要播放这些音乐,Pygame 会使用 mixer
中的 music
模块。可以这样来使用:
pygame.mixer.music.load("bg_music.mp3")pygame.mixer.music.play
这样歌曲(或音乐文件里的任何音乐)会播放一次,然后停止。
下面来试着播放一些声音。首先来播放“啪啪”声。
我们还需要一个 while
循环来保证 Pygame 程序一直运行。另外,尽管目前没有画任何图形,但 Pygame 程序仍然需要有一个窗口。而且,在某些系统上,mixer
初始化还需要一点时间。如果播放声音太快,你可能只能听到声音的一部分,或者根本什么都听不到。所以我们会等一会,直到 mixer
准备好。这个代码见代码清单 19-1。
代码清单 19-1 尝试在 Pygame 中播放声音
试着运行这个程序,看看它的效果如何。
现在来使用 mixer.music
模块播放一些音乐。只需要修改代码清单 19-1 中的几行代码。新代码见代码清单 19-2。
代码清单 19-2 播放音乐
再来试一试,确保你能听到音乐。
我不知道你的具体情况,不过对我来说听起来声音太大了。我必须把计算机的音量调小。下面来看如何在程序中控制声音的音量。