2013-06-05 10 views
0

Я играю звуковые файлы ogg из списка, созданного в моем выбранном каталоге музыкальных файлов. По какой-то причине первая песня пропущена, и она играет, начиная со второй песни. По какой-то причине он иногда играет секундную часть первой песни, что заставляет меня поверить, что есть проблема с тем, как я пытаюсь поставить в очередь песни из списка в цикле, но я не могу их исправить.PyGame Queuing Music Problems, не дожидаясь первой песни

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 

ответ

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