前言
基礎模塊的知識通過這么長時間的學習已經有所了解,更加深入的話需要通過完成各種項目,在這個過程中逐漸學習,成長。
我們的下一步目標是完成python crash course中的外星人入侵項目,這是一個2D游戲項目。在這之前,我們先簡單學習一下pygame
模塊。
私信我發送消息python資料,領取python crash course
中文版PDF。
pygame
Pygame是一個開源的Python多媒體開發庫,專門用于開發2D游戲。它是Python編程語言的一個擴展,基于 SDL (Simple DirectMedia Layer) 庫,提供了豐富的功能來處理圖形、聲音、事件處理等游戲開發所需的基本要素,使得創建游戲變得更加簡單直接。
音頻
游戲中必不可少的就是游戲的BGM了,有的游戲對話的時候除了文字甚至還有對話內容的語音。這些音頻的功能,pygame當然也是提供的。
在pygame中,提供音頻功能的模塊主要有兩個:pygame.mixer 和 pygame.sndarray 。接下來我們就對這兩個模塊進行學習。
pygame.mixer
pygame.mixer 模塊是 Pygame 中用于處理音頻的部分,它主要分為兩個子模塊:Sound 和 Music。
需要注意Pygame 默認支持 .wav 和 .ogg 格式。對于 .mp3 或其他格式,你可能需要額外的解碼器。
文章上方提供一個.wav格式的文件,可以直接使用,后續有空出個教程安裝解碼器,可以播放MP3文件。
資源尋找的話我是在wav吧通過百度網盤下載的,當然大家也可以百度查詢一下其他資源獲取方式也沒關系。
pygame.mixer.Sound
pygame.mixer.Sound 類用于處理短音頻片段,比如游戲中的音效。
-
創建一個sound對象。
pygame.mixer.Sound(file=None, buffer=None)- 參數:
- file: 字符串,指定音頻文件的路徑。
- buffer: 字節對象,包含音頻數據的緩沖區。
- 返回值:sound對象
- 參數:
import pygamepygame.init()
pygame.mixer.init()# 沒啥用的窗口,單純為了關閉窗口退出音樂播放
screen = pygame.display.set_mode((1200, 800))# 創建 Sound 對象
sound_effect = pygame.mixer.Sound('葉倩文 - 情人知己.wav')
sound_effect.play()# 點擊關閉退出程序,這個后面再講,代碼可以先寫上。
while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()exit()
文件執行,馬上就能聽到情人知己這首經典粵語歌曲了!
還有幾個函數也講一下,但是這里不進行單獨的示例,因為其他函數的功能,可能要學會了輸入以后,通過按鍵的方式來進行會體驗好一點。
-
play(loops=0, maxtime=0, fade_ms=0): 播放聲音。學會按鍵輸入和事件監聽以后,可以通過空格來控制音樂播放和暫停。
- loops: 整數,循環次數(默認不循環)。
- maxtime: 整數,最大播放時間(單位:毫秒)。
- fade_ms: 整數,淡入時間(單位:毫秒)。
-
stop(): 停止播放聲音。學會按鍵輸入和事件監聽以后,可以通過空格來控制音樂播放和暫停。
-
fadeout(time) 在指定時間內淡出聲音。
- time: 整數,淡出時間(單位:毫秒)。
-
set_volume(value): 設置音量。學會按鍵輸入和事件監聽以后,可以通過上下按鈕來控制音量的加減。
- value: 浮點數,音量值(范圍:0.0 到 1.0)。
-
get_num_channels(): 返回聲音對象使用的通道數。
-
get_volume(): 獲取音量。
-
get_length(): 返回聲音的長度(單位:秒)。
pygame.mixer.music
用于處理背景音樂,通常可以播放較長的音頻文件。
- load(filename): 加載音樂文件。
- filename: 字符串,音樂文件的路徑。
和sound不一樣,sound可以顯式的進行使用,music沒有返回對象,可以簡單理解為設置的默認音頻對象。
import pygamepygame.init()
pygame.mixer.init()# 沒啥用的窗口,單純為了關閉窗口退出音樂播放
screen = pygame.display.set_mode((1200, 800))# 加載音樂
pygame.mixer.music.load('葉倩文 - 情人知己.wav')
# 循環播放
pygame.mixer.music.play(loops=-1) # 循環播放# 點擊關閉退出程序,這個后面再講,代碼可以先寫上。
while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()exit()
執行上述代碼,同樣發現電腦會進行情人知己的播放,根據設置的參數,大家耐心聽完會循環進行播放。
除了加載和播放的函數,music還提供了一些其他函數用于實現音頻的暫停,停止,繼續播放等功能。
當然這些功能還是要在學會輸入和監聽事件后,配合使用體驗效果會好點。
- play(loops=0, start=0.0): 開始播放音樂。
- loops: 整數,循環次數(默認不循環)。
- start: 浮點數,開始播放的位置(單位:秒)。
- stop(): 停止播放音樂。
- pause(): 暫停播放音樂。
- unpause(): 繼續播放音樂。
- fadeout(time) 在指定時間內淡出音樂。
- time: 整數,淡出時間(單位:毫秒)。
- set_volume(value): 設置音量。
- value: 浮點數,音量值(范圍:0.0 到 1.0)。
- get_volume(): 獲取音量。
- queue(song, loops=0, start=0.0): 將一首歌加入隊列,當前歌曲結束后播放。
- song: 字符串,音樂文件的路徑。
- loops: 整數,循環次數(默認不循環)。
- start: 浮點數,開始播放的位置(單位:秒)。
queue函數可以單獨試驗一下。
import pygamepygame.init()
pygame.mixer.init()# 沒啥用的窗口,單純為了關閉窗口退出音樂播放
screen = pygame.display.set_mode((1200, 800))# 加載音樂
pygame.mixer.music.load('葉倩文 - 情人知己.wav')
# 加入隊列
pygame.mixer.music.queue('容祖兒-小小.wav')
# 循環播放
pygame.mixer.music.play() # 循環播放# 點擊關閉退出程序,這個后面再講,代碼可以先寫上。
while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()exit()
耐心聽完情人知己,后臺播放出了小小這首歌曲。
怎么樣,是不是有點音樂播放器的感覺了。
Python的魅力不僅于此哦!
結尾
關于音頻的學習就先到這里,主要介紹一下怎么使用pygame播放音頻文件,后續學習了輸入和事件監聽就可以嘗試進行切歌,暫停,繼續播放加減音量等功能編寫了。
作業
- 使用兩種方式播放你喜歡的歌曲。資源不會找的話就播放我提供的兩首歌曲吧!