gpt4 book ai didi

python - 如何设置循环 pygame.mixer 播放列表在后台播放?

转载 作者:太空宇宙 更新时间:2023-11-03 14:25:53 24 4
gpt4 key购买 nike

我有一个播放列表 .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)

最佳答案

我尝试使用queue()但这对我不起作用。
也许它需要 for event 循环才能工作,但它对我来说也不起作用。

在下面的文档中queue()我发现了这个评论:

This method only queues one music file.
If you call it and there already is a queued file, it will be overrided.

所以队列没那么有用。

<小时/>

我使用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()

关于python - 如何设置循环 pygame.mixer 播放列表在后台播放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47638477/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com