如何在 pygame 调音台中将 .wav 文件排队,然后循环播放该文件?由于 GUI 阻塞,我无法使用 time.sleep 或任何循环
How can I queue a .wav file in pygame mixer and then play that file in a loop? I cannot use time.sleep or any loops because of GUI blocking
我目前在使用 pygame 的混音器时遇到问题。我正在尝试将一个文件 ("Ex1.wav") 排队,以便在 pygame 中播放我正在尝试制作的应用程序。我想在之前的音频文件 ("Ex2.wav") 播放后循环 Ex2.wav,但我不能使用 while
或 for
循环,因为我使用的是 GuiZero,它不能有循环,因为它会阻塞 GUI。也许代码示例更容易理解我想要表达的意思。
pygame.mixer.music.load("Ex2.wav")
pygame.mixer.music.play(10)
pygame.mixer.music.queue("Ex1.wav")
pygame.mixer.music.play(-1)
这没有实现。我试过了。
我想这样做 Ex1.wav 直到 Ex2.wav 完成后才播放和循环播放。就像我说的,由于 GUI 阻塞,我不能使用 while
或 for
循环,而且出于同样的原因,我也不能使用 time.sleep()
或任何其他等待命令。
如果没有一个简单的解决方案,我理解。
python Threading 可能会解决您的问题
只需创建一个函数并在单独的线程中执行它,这样您的 GUI 就不会冻结
在迭代中
import threading
def music_player ():
for music in your_musics_list:
pygame.mixer.music.load(music)
pygame.mixer.music.play(10)
th = threading.Thread(target=music_player)
try:
th.start()
except:
pass
感谢@mattiiss 解决了我的问题
我目前在使用 pygame 的混音器时遇到问题。我正在尝试将一个文件 ("Ex1.wav") 排队,以便在 pygame 中播放我正在尝试制作的应用程序。我想在之前的音频文件 ("Ex2.wav") 播放后循环 Ex2.wav,但我不能使用 while
或 for
循环,因为我使用的是 GuiZero,它不能有循环,因为它会阻塞 GUI。也许代码示例更容易理解我想要表达的意思。
pygame.mixer.music.load("Ex2.wav")
pygame.mixer.music.play(10)
pygame.mixer.music.queue("Ex1.wav")
pygame.mixer.music.play(-1)
这没有实现。我试过了。
我想这样做 Ex1.wav 直到 Ex2.wav 完成后才播放和循环播放。就像我说的,由于 GUI 阻塞,我不能使用 while
或 for
循环,而且出于同样的原因,我也不能使用 time.sleep()
或任何其他等待命令。
如果没有一个简单的解决方案,我理解。
python Threading 可能会解决您的问题
只需创建一个函数并在单独的线程中执行它,这样您的 GUI 就不会冻结 在迭代中
import threading
def music_player ():
for music in your_musics_list:
pygame.mixer.music.load(music)
pygame.mixer.music.play(10)
th = threading.Thread(target=music_player)
try:
th.start()
except:
pass
感谢@mattiiss 解决了我的问题