我正在播放从我选择的音乐文件目录生成的列表中的ogg声音文件。由于某种原因,第一首歌被跳过,它从第二首歌开始播放。由于某种原因,它偶尔会播放第一首歌的瞬间,这让我相信我是如何试图在循环中将列表中的歌曲排队但我似乎无法修复它。
import pygame
import sys
import os
from pygame.locals import *
surface = pygame.display.set_mode((640, 480))
musicDir = "/Users/user/Desktop/Dat Sound/Music/"
x = os.listdir(musicDir)
del(x[0]) # Deleting first element because it's DS Store file (Mac)
print x # The list is ['Bonfire.ogg', 'Voodoo Child.ogg']
n = ''
count = 1
pygame.mixer.init()
for i in range(len(x)):
n = musicDir + str(x[i])
print n
pygame.mixer.music.load(n)
pygame.mixer.music.play()
pygame.mixer.music.queue(musicDir + str(x[i]))
# I'm queueing the next song in the list of songs from the folder + its location
print pygame.mixer.music.get_busy()
# get_busy returns true for both files but only the second is playing
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
答案 0 :(得分:1)
看起来你正在加载和播放一首歌,然后排队,然后在循环的下一次迭代中加载并播放第二首歌曲,然后再次排队......
n = musicDir + str(x[i])
pygame.mixer.music.load(n) # so you load the song...
pygame.mixer.music.play() # then you play it....
pygame.mixer.music.queue(musicDir + str(x[i])) # i hasn't changed, this is the same song
# you just loaded and started playing
然后for
循环进入下一次迭代,你做完全相同的事情,但下一首歌。
尝试这样的事情:
n = musicDir + str[0] # let's load and play the first song
pygame.mixer.music.load(n)
pygame.mixer.music.play()
for song in x:
pygame.mixer.music.queue(musicDir + str(song)) # loop over and queue the rest