我一直试图在用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()
答案 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()