讀古今文學網 > 父與子的編程之旅:與小卡特一起學Python > 19.3 播放聲音 >

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.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 播放音樂

再來試一試,確保你能聽到音樂。

我不知道你的具體情況,不過對我來說聽起來聲音太大了。我必須把計算機的音量調小。下面來看如何在程序中控制聲音的音量。