[英]How can I play an mp3 with pygame?
import pygame
file = 'some.mp3'
pygame.init()
pygame.mixer.init()
pygame.mixer.music.load(file)
pygame.mixer.music.play()
這會輸出“進程已完成,退出代碼為 0”,但它不播放任何內容。 我該如何解決這個問題?
play 函數開始播放音樂,但立即返回。 然后你的程序就結束了,pygame 對象會自動銷毀,這會導致音樂停止。
正如您所評論的,如果您在退出之前等待它,它確實會播放音樂 - 因為這樣 pygame 對象在 while 循環完成之前不會被銷毀。
while pygame.mixer.music.get_busy():
pygame.time.Clock().tick(10)
音樂停止是因為它是一個異步事件,這意味着它將繼續與腳本一起播放。 然后,腳本立即停止,不給音樂機會開始。 如前所述,您可以使用
while pygame.mixer.music.get_busy():
pygame.time.Clock().tick(10)
然而,更好的是pygame.event.wait()
,因為它會等待所有異步事件結束。
這是一個超級簡單的方法。
import pygame
file = 'some.mp3'
pygame.init()
pygame.mixer.init()
pygame.mixer.music.load(file)
pygame.mixer.music.play()
pygame.event.wait()
我從thepythongamebook.com找到了一個很好的解決方案:
pygame.mixer.pre_init(44100, -16, 2, 2048) # setup mixer to avoid sound lag
pygame.init()
pygame.mixer.init()
pygame.mixer.music.load('music_01.mp3')
pygame.mixer.music.play(-1)
試試這個。
import pygame
def pmusic(file):
pygame.init()
pygame.mixer.init()
clock = pygame.time.Clock()
pygame.mixer.music.load(file)
pygame.mixer.music.play()
while pygame.mixer.music.get_busy():
print("Playing...")
clock.tick(1000)
def stopmusic():
pygame.mixer.music.stop()
def getmixerargs():
pygame.mixer.init()
freq, size, chan = pygame.mixer.get_init()
return freq, size, chan
def initMixer():
BUFFER = 3072 # audio buffer size, number of samples since pygame 1.8.
FREQ, SIZE, CHAN = getmixerargs()
pygame.mixer.init(FREQ, SIZE, CHAN, BUFFER)
try:
initMixer()
file = 'C:\\data\\03.mp3'
pmusic(file)
except KeyboardInterrupt: # to stop playing, press "ctrl-c"
stopmusic()
print("\nPlay Stopped by user")
except Exception:
print("unknown error")
print("Done")
由於您導入的方式,音頻似乎無法播放。 下面的代碼按預期播放聲音。 除了它使用from pygame import mixer
import pygame
而不是import pygame
之外,這里沒有任何變化。 這可能是因為 Pygame 是一個包,但我不確定。
from pygame import mixer
file = 'some.mp3'
mixer.init()
mixer.music.load(file)
mixer.music.play()
PyGame有 2 個不同的播放聲音和音樂的模塊, pygame.mixer模塊和pygame.mixer.music模塊。 該模塊包含用於加載 Sound 對象和控制播放的類。 文檔中解釋了差異:
音樂播放和常規聲音播放之間的區別在於音樂是流式播放的,而不是一次真正加載。 混音器系統一次僅支持單個音樂流。
如果要播放mp3文件,則需要對模塊進行初始化。 使用pygame.mixer.music.load
加載文件。 調用pygame.mixer.music.play()
開始播放音樂流。 最后,您必須等待文件播放。
使用pygame.mixer.music.get_busy()
測試是否正在混合聲音。 循環不斷地查詢混音器的狀態。
在循環中,您需要通過pygame.time.delay
或pygame.time.Clock.tick
延遲時間。 此外,您還需要處理應用程序循環中的事件。 分別參見pygame.event.get()
pygame.event.pump()
:
對於游戲的每一幀,您都需要對事件隊列進行某種調用。 這確保您的程序可以在內部與操作系統的其余部分進行交互。
import pygame
pygame.init()
pygame.mixer.music.load('my_music.mp3')
pygame.mixer.music.play()
clock = pygame.time.Clock()
while pygame.mixer.music.get_busy():
clock.tick(60)
pygame.event.poll()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.