你如何在PyGame Subset for Android中循环播放音乐?

时间:2011-12-10 18:05:54

标签: android loops pygame playback

我一直试图在用PyGame Subset编写的Android游戏中循环播放音乐。这是我到目前为止,它只播放音频文件一次。我真的想使用内置的循环功能,这样我就不必使用计时器手动循环音频。有什么想法吗?

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()

3 个答案:

答案 0 :(得分:1)

注意在Android 5.x中不起作用。我知道这是一个老帖子,但我也遇到了这个问题。由于混音器模块存在错误,zenopython的答案将适用于一些调整。如果您查看anroid.mixer模块并查看您将看到的音乐课程。

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

你可以看到这实际上调用了get_volume(),它总是返回1.0。为了解决这个问题,我将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')

通常pgs4a中的mixer.music模块有很多错误。我发现的另一个错误是在mixer.music.pause()和mixer.music.unpause()中。 unpause()只是再次调用pause(),所以我还必须编辑它以允许在游戏停止时暂停音乐。见下文

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

答案 1 :(得分:0)

也许尝试这个而不是music.load():

从文件

创建新的Sound对象
mixer.Sound(filename): return Sound
Sound.play(-1)

答案 2 :(得分:0)

我很确定问题可以通过mixer.music.get_busy()返回bool值来解决,如果播放音乐则返回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()