pygame學習筆記(4):聲音控制

來源:互聯網
上載者:User
pygame.mixer是一個用來處理聲音的模組,其含義為“混音器”。遊戲中對聲音的處理一般包括製造聲音和播放聲音兩部分,這裡僅學習了播放聲音部分。

1、pygame.mixer啟動與初始化

pygame.mixer.init():mixer的初始化。程式中,使用時,一般放在最前面的幾句代碼中:

代碼如下:


import pygame
pygame.init()
pygame.mixer.init()


2、播放聲音片段wav檔案
播放聲音片段wav檔案時,pygame.mixer使用Sound對象,格式為:

代碼如下:


soundwav=pygame.mixer.Sound("filename.wav") #filename.wav檔案名稱
soundwav.play()


在遊戲中,往往用下面的代碼來完成:

代碼如下:


import pygame,sys
pygame.init()
pygame.mixer.init()
screen=pygame.display.set_mode([640,480])
pygame.time.delay(1000)#等待1秒讓mixer完成初始化
soundwav=pygame.mixer.Sound("filename.wav")
soundwav.play()
while 1:
for event in pygame.event.get():
if event.type==pygame.QUIT:
sys.exit()


3、播放mp3、wma、ogg音樂檔案
這裡只是學習了一個mp3檔案,如果非windows系統,那可以試試ogg檔案。播放音樂檔案主要使用pygame.mixer中的music模組,主要方法為:

代碼如下:


pygame.mixer.music.load("filename.mp3")
pygame.mixer.music.play(n,start,stop)#第一個參數為播放次數,如果是-1表示迴圈播放,省略表示只播放1次。第二個參數和第三個參數分別表示播放的起始和結束位置。


完整的代碼為:

代碼如下:


import pygame,sys
pygame.init()
pygame.mixer.init()
screen=pygame.display.set_mode([640,480])
pygame.time.delay(1000)
pygame.mixer.music.load("filename.mp3")
pygame.mixer.music.play()
while 1:
for event in pygame.event.get():
if event.type==pygame.QUIT:
sys.exit()


程式在運行時,一旦開始播放音樂,就會繼續做下一件事情,也就是說,如果我們要播放兩首歌,那麼

代碼如下:


pygame.mixer.music.load("filename1.mp3")
pygame.mixer.music.play()
pygame.mixer.music.load("filename2.mp3")
pygame.mixer.music.play()


這段代碼運行後,就會出現兩首歌同時在播放的情況。實際中,我們常常需要播放完一首,再播放另一首,這樣就需要利用pygame.mixer.music.get_busy()函數來判斷,如果函數傳回值為True那麼說明目前處於忙的狀態,否則返回 False。例如:

代碼如下:


import pygame,sys
pygame.init()
pygame.mixer.init()
screen=pygame.display.set_mode([640,480])
pygame.time.delay(1000)
pygame.mixer.music.load("filename.mp3")
pygame.mixer.music.play()
soundwav=pygame.mixer.Sound("filename.wav")
while 1:
for event in pygame.event.get():
if event.type==pygame.QUIT:
sys.exit()
if not pygame.mixer.music.get_busy():
soundwav.play()
pygame.time.delay(5000)#等待5秒讓filename.wav播放結束
sys.exit()


4、控制音量

pygame.mixer.music.set_volume()用來控制音量,取值範圍為0-1.0的浮點數。0為最小值,1為最大值。

5、製作mp3播放器中遇到的問題

python+wxpython+pygame完全可以很容易方便的做出一個mp3播放器,但是在製作中遇到兩個問題:

一是中文歌曲名的顯示,通過搜尋已經解決,加上# encoding='GBK'
二是pygame在播放mp3檔案時,發現並不是所有的mp3檔案都有播放,常常會出現播放聲音不正確的情況,有時只是雜響。經過與python學習交流群(2)中的すeasyげ交流,すeasyげ提出位速128kbps的mp3檔案可以播放,但從網上下了幾個128kbps的mp3測試後,發現播放不正常的情況依然存在。不知道哪位大牛能解決這一問題,希望能把解決方案告知一下,謝謝。

因此,如果您打算寫一個mp3的播放工具,python能做mp3播放的模組很多,這裡,我覺得可以考慮使用mp3play模組,比較方便簡單。目前版本為mp3play 0.1.15,具體下載地址為http://pypi.python.org/pypi/mp3play/。這裡簡單介紹一下其主要方法:

play(n,starms,endms):播放,第一個參數表示次數,第二、三個參數表示播放的起止位置,單位是毫秒。
stop(): 停止。
pause(), unpause(): 暫停和開始。
isplaying(): 判斷是否現正播放,如果返回為TRUE,表示現正播放歌曲。
ispaused(): 判斷是否為暫停,如果返回為TRUE,表示暫停。
seconds(): 返回mp3檔案共多少秒,注意這裡的單位是秒。
milliseconds(): 返回mp3檔案共多少毫秒,注意這裡的單位是毫秒。
mp3play首頁上給出的例子為:

代碼如下:


import mp3play
filename = r'C:\music.mp3'#播放c盤下的music.mp3檔案
clip = mp3play.load(filename)
clip.play()
import time
time.sleep(min(30, clip.seconds()))#如果mp3檔案的長度小於30少時,全部播放完,否則僅播放30秒。
clip.stop()

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.