讀古今文學網 > 父與子的編程之旅:與小卡特一起學Python > 19.8 為 PyPong 添加音樂 >

19.8 為 PyPong 添加音樂

還有一件事要做,就是添加音樂。需要加載音樂文件,設置音量,然後開始播放。我們希望玩遊戲期間音樂一直在重複,所以會使用特殊值 -1,如下:

pygame.mixer.music.load("bg_music.mp3")pygame.mixer.music.set_volume(0.3)pygame.mixer.music.play(-1)  

這個代碼可以放在主 while 循環前面的任意位置。它會開始播放音樂。現在只需要在最後讓音樂停下來,有一個很好的辦法來做到這一點。pygame.mixer.music 有一個 fadeout 方法,會讓音樂淡出(逐漸減弱直到消失),而不是戛然而止。只需要告訴它淡出需要多長時間,例如:

pygame.mixer.music.fadeout(2000)  

這裡設置為 2000 毫秒,也就是 2 秒。這一行可以與 done = True 設置放在同一個位置。(這個設置在前在後都無關緊要。)

現在程序已經增加了音效和音樂。試試看聽起來怎麼樣!也許你想看看如何把所有這些內容整合在一起,下面給出這個程序的最後版本,也就是代碼清單 19-5。一定要確保 wackyball.bmp 和所有聲音文件與程序在同一個文件夾中。

代碼清單 19-5 有聲音和音樂的 PyPong

這個代碼太長了!(大約 100 行,還要加上一些空行。)這個程序完全可以寫得短一些,不過那樣一來,讀代碼和理解起來都會更困難。其實這幾章我們一直都在構建這個程序,每章補充一點內容,所以你並不需要一次鍵入所有這些代碼。

如果你是按順序讀這本書,現在應該已經瞭解程序的各個部分分別做什麼,也應該知道這些部分如何整合到一起。不過萬一你需要這個程序的完整代碼,也可以在 \examples 文件夾(如果已經安裝本書的安裝程序的話)和網站上找到這個程序的代碼清單。

在下一章,我們將建立一個不同類型的圖形程序:一個有按鈕、菜單的程序,也就是一個 GUI。

你學到了什麼

在這一章,你學到了以下內容。

  • 如何向程序添加聲音。

  • 如何播放聲音片段(通常是 .wav 文件)。

  • 如何播放音樂文件(通常是 .mp3 文件)。

  • 如何知道一個聲音已經播放完畢。

  • 如何控制音效和音樂的音量。

  • 如何讓音樂重複,使它反覆播放。

  • 如何讓音樂淡出。

測試題

1. 可以用哪幾種類型的文件存儲聲音?

2. 哪個 Pygame 模塊用來播放音樂?

3. 如何設置一個 Pygame 聲音對象的音量?

4. 如何設置背景音樂的音量?

5. 如何讓音樂淡出?

動手試一試

試著向第 1 章中的猜數遊戲添加聲音。儘管這個遊戲是文本模式的,但與這一章中的例子一樣,仍然需要增加一個 Pygame 窗口。\examples\sounds 文件夾(和網站上)有一些聲音可供你使用:

  • Ahoy.wav

  • TooLow.wav

  • TooHigh.wav

  • WhatsYerGuess.wav

  • AvastGotIt.wav

  • NoMore.wav

或者,你也可以錄製自己的聲音,這可能很有意思。可以使用一個錄音工具,比如 Windows 中的 Sound Recorder,或者可以從 audacity.sourceforge.net/ 下載一個免費程序 Audacity(很多操作系統上都提供了這個工具)。