首页 » 与孩子一起学编程 » 与孩子一起学编程全文在线阅读

《与孩子一起学编程》19.3 播放声音

关灯直达底部

播放声音时,要从硬盘(或从 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.helloworldbook.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 中播放声音

试着运行这个程序,看看它的效果如何。应该记得,IDLE 运行 Pygame 程序可能有问题,所以可能需要使用 SPE 或其他方法来运行这个程序。

现在来使用 mixer.music 模块播放一些音乐。只需要修改代码清单 19-1 中的几行代码。新代码见代码清单 19-2。

代码清单 19-2 播放音乐

再来试一试,确保你能听到音乐。

我不知道你的具体情况,不过对我来说听起来声音太大了。我必须把计算机的音量调小。下面来看如何在程序中控制声音的音量。