Python 正在尝试在pygame.music中将多个文件排队

Python 正在尝试在pygame.music中将多个文件排队,python,python-2.7,pygame,Python,Python 2.7,Pygame,我正在尝试以随机顺序获取一个音乐文件队列,以便使用pygame在raspberry pi上播放。但我发现了一个问题(限制?),它似乎只能排队播放歌曲 我试图在我的桌面上复制它(这样我就可以调试它),但是队列似乎根本不起作用。它甚至不能将另外一个文件排队。因此,我想知道为什么它甚至不能在我的桌面上工作。我将桌面测试/调试代码精简为: import pygame import random import time soundType = ".ogg" # files are in the same

我正在尝试以随机顺序获取一个音乐文件队列,以便使用pygame在raspberry pi上播放。但我发现了一个问题(限制?),它似乎只能排队播放歌曲

我试图在我的桌面上复制它(这样我就可以调试它),但是队列似乎根本不起作用。它甚至不能将另外一个文件排队。因此,我想知道为什么它甚至不能在我的桌面上工作。我将桌面测试/调试代码精简为:

import pygame
import random
import time

soundType = ".ogg"
# files are in the same directory at the moment
musicLocation = ""
musicFiles = (("takepills01", 0), ("takepistol01", 0), ("takesniper01", 0), ("taunt01", 0), ("teamkillaccident02", 0), ("thanks01", 0))

queuedFilesResut = []

pygame.mixer.init()

# choose a random file to start
selectedMusicName = musicFiles[random.randint(0, len(musicFiles) - 1)][0]
pygame.mixer.music.load(musicLocation + selectedMusicName + soundType)
queuedFilesResut.append(selectedMusicName)

# choose a random file to follow
selectedMusicName = musicFiles[random.randint(0, len(musicFiles) - 1)][0]
pygame.mixer.music.play()
pygame.mixer.music.queue(musicLocation + selectedMusicName + soundType)
queuedFilesResut.append(selectedMusicName)

# not sure if it matters if the play() call is before or after the queue() call
# seen it both ways on a few examples
#pygame.mixer.music.play()

# print to see what was selected
print queuedFilesResut

# now sleep for a bit while the music plays, the testing files are very short, each only 1-2 seconds
time.sleep(5)
对于上面的代码,现在发生的是,无论选择什么文件,都会首先播放,然后就是它。以下是我在意识到自己甚至无法将一个文件排队之前,尝试将多个文件排队的过程:

for counter in range(0, 10):
    selectedMusicName = musicFiles[random.randint(0, len(musicFiles) - 1)][0]
    pygame.mixer.music.queue(musicLocation + selectedMusicName + soundType)
    queuedFilesResut.append(selectedMusicName)
我真的很期待pygame能够播放一首歌并将n个文件排队,然后我就可以忘记它,让它继续运行


虽然这只是一个关于为什么上面的脚本不起作用的问题,但我应该补充一点,当我回到raspberry pi时,我通过lighttpd调用音乐播放python脚本,因此需要方法调用返回以响应-我不认为我可以使用循环来检查音乐何时播放完/检查事件队列。Lighttpd似乎还将python限制为只有一个线程


我确实有一个关于如何绕过整个问题/限制的想法,但它涉及到在启动时作为一个完全独立的python进程运行一个循环,并有一个书面文件在lighttpd python和python之间进行通信。我希望找到一种更好/更干净的方法。

我知道这是在2014年,并且是在python 2.7中实现的,但这可能对解决此问题的其他人有用

我正在使用python 3.4

您可以尝试将随机选择的文件放入列表中,并像播放列表一样播放该列表。歌曲将在列表中从左到右播放

例如

您可以使用以下方法将文件添加到此列表mid程序:

#Chosen random music file
songList.append(musicFile)
希望这有帮助。
干杯

只是为了提供帮助,而不是执行大型的
random.randint()
,请尝试random.choice。或者只做随机的。randint(1,5),为每个数字分配一首歌。哦,太好了。我不知道random.choice用于从列表中提取随机元素。这并不能解决问题,但仍然有帮助。谢谢
#Chosen random music file
songList.append(musicFile)