讀古今文學網 > 父與子的編程之旅:與小卡特一起學Python > 19.4 控制音量 >

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 等待歌曲結束

這個代碼會播放一次歌曲,接下來播放音效,然後程序會結束。