我正在尝试以随机顺序获取音乐文件队列,以便使用pygame在树莓派上播放。但我发现一个问题(限制?)似乎只能排队歌曲。
我试图在我的桌面上重现它(所以我可以调试它),但排队似乎根本不起作用。它甚至无法排队1个其他文件。因此,我想知道为什么它甚至不能在我的桌面上工作。我已将我的桌面测试/调试代码删除如下:
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)
对于上面的代码现在发生的事情是,无论首先选择哪个文件,那就是它。在我意识到我甚至无法排队1个文件之前,我试图排队多个文件的方式如下:
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限制为只有1个线程。
我确实知道如何解决整个问题/限制,但它涉及在启动时运行循环作为一个完全独立的python进程,并有一个写入文件来在lighttpd-python和python之间进行通信。我希望找到更好/更清洁的方式。
答案 0 :(得分:0)
我知道这是在2014年,并且使用的是python 2.7,但是对于遇到此问题的其他人来说这可能很有用。
我正在使用python 3.4。
您可以尝试将随机选择的文件放在列表中,然后像播放列表一样播放列表。歌曲将在列表中从左到右播放。
E.g。
for file in musicList:
#play song here
time.sleep(5)
您可以使用以下方法将文件添加到此程序列表中:
#Chosen random music file
songList.append(musicFile)
希望这会有所帮助。 干杯