pygame學(xué)習(xí)筆記(4):聲音控制
pygame.mixer是一個(gè)用來處理聲音的模塊,其含義為“混音器”。游戲中對(duì)聲音的處理一般包括制造聲音和播放聲音兩部分,這里僅學(xué)習(xí)了播放聲音部分。
1、pygame.mixer啟動(dòng)與初始化
pygame.mixer.init():mixer的初始化。程序中,使用時(shí),一般放在最前面的幾句代碼中:
import pygame
pygame.init()
pygame.mixer.init()
2、播放聲音片段wav文件
播放聲音片段wav文件時(shí),pygame.mixer使用Sound對(duì)象,格式為:
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音樂文件
這里只是學(xué)習(xí)了一個(gè)mp3文件,如果非windows系統(tǒng),那可以試試ogg文件。播放音樂文件主要使用pygame.mixer中的music模塊,主要方法為:
pygame.mixer.music.load("filename.mp3")
pygame.mixer.music.play(n,start,stop)#第一個(gè)參數(shù)為播放次數(shù),如果是-1表示循環(huán)播放,省略表示只播放1次。第二個(gè)參數(shù)和第三個(gè)參數(shù)分別表示播放的起始和結(jié)束位置。
完整的代碼為:
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()
程序在運(yùn)行時(shí),一旦開始播放音樂,就會(huì)繼續(xù)做下一件事情,也就是說,如果我們要播放兩首歌,那么
pygame.mixer.music.load("filename1.mp3")
pygame.mixer.music.play()
pygame.mixer.music.load("filename2.mp3")
pygame.mixer.music.play()
這段代碼運(yùn)行后,就會(huì)出現(xiàn)兩首歌同時(shí)在播放的情況。實(shí)際中,我們常常需要播放完一首,再播放另一首,這樣就需要利用pygame.mixer.music.get_busy()函數(shù)來判斷,如果函數(shù)返回值為True那么說明目前處于忙的狀態(tài),否則返回 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播放結(jié)束
sys.exit()
4、控制音量
pygame.mixer.music.set_volume()用來控制音量,取值范圍為0-1.0的浮點(diǎn)數(shù)。0為最小值,1為最大值。
5、制作mp3播放器中遇到的問題
python+wxpython+pygame完全可以很容易方便的做出一個(gè)mp3播放器,但是在制作中遇到兩個(gè)問題:
一是中文歌曲名的顯示,通過搜索已經(jīng)解決,加上# encoding='GBK'
二是pygame在播放mp3文件時(shí),發(fā)現(xiàn)并不是所有的mp3文件都有播放,常常會(huì)出現(xiàn)播放聲音不正確的情況,有時(shí)只是雜響。經(jīng)過與python學(xué)習(xí)交流群(2)中的すeasyげ交流,すeasyげ提出位速128kbps的mp3文件可以播放,但從網(wǎng)上下了幾個(gè)128kbps的mp3測(cè)試后,發(fā)現(xiàn)播放不正常的情況依然存在。不知道哪位大牛能解決這一問題,希望能把解決方法告知一下,謝謝。
因此,如果您打算寫一個(gè)mp3的播放工具,python能做mp3播放的模塊很多,這里,我覺得可以考慮使用mp3play模塊,比較方便簡(jiǎn)單。目前版本為mp3play 0.1.15,具體下載地址為http://pypi.python.org/pypi/mp3play/。這里簡(jiǎn)單介紹一下其主要方法:
play(n,starms,endms):播放,第一個(gè)參數(shù)表示次數(shù),第二、三個(gè)參數(shù)表示播放的起止位置,單位是毫秒。
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文件的長(zhǎng)度小于30少時(shí),全部播放完,否則僅播放30秒。
clip.stop()
相關(guān)文章
Python實(shí)現(xiàn)PDF到Word文檔的高效轉(zhuǎn)換
這篇文章主要為大家詳細(xì)介紹了如何使用Python編程語言,結(jié)合庫和工具,將PDF文件轉(zhuǎn)換為可編輯的Word文檔,使文檔的編輯變得方便高效,需要的可以參考下2024-01-01python實(shí)現(xiàn)文件名批量替換和內(nèi)容替換
這篇文章主要介紹了python實(shí)現(xiàn)文件名批量替換和內(nèi)容替換,第一個(gè)例子可以指定文件類型,需要的朋友可以參考下2014-03-03詳解Django 時(shí)間與時(shí)區(qū)設(shè)置問題
這篇文章主要介紹了Django 時(shí)間與時(shí)區(qū)設(shè)置問題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07python?包實(shí)現(xiàn)?time?時(shí)間管理操作
這篇文章主要介紹了python包實(shí)現(xiàn)time時(shí)間管理操作,文章通過獲取當(dāng)前時(shí)間戳,即當(dāng)前系統(tǒng)內(nèi)表示時(shí)間的一個(gè)浮點(diǎn)數(shù),下文更多相關(guān)內(nèi)容需要的小伙伴可以參考一下2022-04-04