2011-12-10 127 views
4

我一直在試圖讓我的Android遊戲中使用PyGame子集編寫的音樂循環。這是我迄今爲止所做的,它只播放一次音頻文件。我真的很想使用內置的循環功能,這樣我就不必使用定時器手動循環音頻。有任何想法嗎?如何在Android的PyGame子集中循環播放音樂?

import pygame 
try: 
    import pygame.mixer as mixer 
except ImportError: 
    import android_mixer as mixer 
if mixer: 
    mixer.music.load("woo.mp3") 
    mixer.music.play(-1) 
while True: 
    if mixer: 
     mixer.periodic() 

回答

0

也許試試這個,而不是music.load():

從文件

mixer.Sound(filename): return Sound 
Sound.play(-1) 
0

我相當肯定,問題可以得到解決創建一個新的Sound對象mixer.music.get_busy()返回一個布爾值,如果音樂正在播放,則爲True;如果沒有播放音樂,則爲False。

import pygame 
try: 
    import pygame.mixer as mixer 
except ImportError: 
    import android_mixer as mixer 
if mixer: 
    mixer.music.load("woo.mp3") 
    mixer.music.play(-1) 
while True: 
    if mixer: 
     if mixer.music.get_busy() == False: 
      mixer.music.play() 
1

注意在Android 5.x中不起作用。我知道這是一箇舊帖子,但我有一個也遇到了這個問題。 zenopython的答案會在調音臺模塊出現錯誤時進行一些調整。如果你看看anroid.mixer模塊,看看你會看到的音樂課程。

@staticmethod 
def get_busy(): 
    return music_channel.get_volume() 

你可以看到這實際上調用了總是返回1.0的get_volume()。爲了解決這個問題我複製了mixer.py文件到我的遊戲目錄,並把它改爲

@staticmethod 
    def get_busy(): 
     return music_channel.get_busy() 

然後imoport混頻器和它的作品。所以像

import pygame 
try: 
    import pygame.mixer as mixer 
except ImportError: 
    import mixer 
if mixer: 
    mixer.music.load("woo.mp3") 
    mixer.music.play(-1) 
while True: 
    if mixer: 
     if mixer.music.get_busy() == False: 
      mixer.music.play(-1) 

這對我有效。

如上所述,這不適用於5.x.

另一種解決方案是簡單地排隊音樂這確實工作

mixer.music.load('music') 
mixer.music.play() 
mixer.music.queue('music') 

一般的mixer.music模塊中pgs4a有一些錯誤。我發現的另一個錯誤是在mixer.music.pause()和mixer.music.unpause()中。 unpause()只是再次調用pause(),所以我也必須編輯它以允許在遊戲停止時暫停音樂。見下文

if android:               
    if android.check_pause(): 
     mixer.music.pause() 
     android.wait_for_resume() 
     mixer.music.unpause()