我有一个.ogg
音乐文件的播放列表,我想在大型播放列表循环中设置它们在游戏背景中播放。因此,一旦所有音乐文件都由pygame.mixer
播放,它就会循环回到开头重新开始。
但是,当我加载第一首曲目时,将其设置为播放,然后将其他曲目添加到队列中,只播放第一首曲目。我不知道如何让队列循环。我做错了什么?
playlist = ["2.ogg", "3.ogg", "1.ogg"]
pygame.mixer.init(frequency = 48000)
pygame.mixer.music.load("1.ogg")
pygame.mixer.music.play()
for track in playlist:
pygame.mixer.music.queue(track)
答案 0 :(得分:0)
我尝试使用queue(),但它对我不起作用
也许它需要for event
循环才能工作,但它对我也没有用。
在下面的文档queue()中,我发现了这条评论:
此方法仅排队一个音乐文件 如果您调用它并且已经有一个排队的文件,它将被覆盖。
所以队列不是那么有用。
我使用pygame.mixer.music.set_endevent()和for event
循环来启动下一首曲目
import pygame
# define own event type
NEXT = pygame.USEREVENT + 1
playlist = [
'track_one.ogg',
'track_two.ogg',
'track_three.ogg',
'track_four.ogg',
]
tracks_number = len(playlist)
current_track = 0
pygame.init() # need it for event loop
#screen = pygame.display.set_mode((800,600)) # it can be useful to stop program
pygame.mixer.init(frequency = 48000)
# start first track
pygame.mixer.music.load(playlist[current_track])
pygame.mixer.music.play()
# send event NEXT every time tracks ends
pygame.mixer.music.set_endevent(NEXT)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == NEXT:
# get next track (modulo number of tracks)
current_track = (current_track + 1) % tracks_number
print("Play:", playlist[current_track])
pygame.mixer.music.load(playlist[current_track])
pygame.mixer.music.play()
pygame.quit()