我试图通过制作播放列表在游戏中播放一些音乐,当音乐结束时,下一个开始。。。经过几个小时的寻找,我仍然找不到一个解决方案。。。 我知道如何播放一首音乐以及如何使用next\u source播放下一首音乐,但我不知道如何让它在音乐结束时自动播放。这就是我来这里的原因。 我发现很多网站/论坛都告诉你在eos上使用,但我就是做不到
player = pyglet.media.Player()
music1 = pyglet.media.load('somemusic.wav')
music2 = pyglet.media.load('someothermusic.wav')
player.queue(music1)
player.queue(music2)
#the part i'm struggling with (I've tried that)
player.on_eos = pyglet.media.Player.on_eos
@player.event
def on_eos():
#some function
print("on player eos")
player.push_handlers(on_eos)
#
player.play()
这给了我一个错误:TypeError:queue()缺少1个必需的位置参数:“source”#edit:no more(已解决),问题出在其他地方
播放按钮:
注意:如果您像我一样将键绑定到函数(使用tkinter),并且它们不再工作,请使用window.focus\u force()它将解决您的问题
如果运行正确,您必须在代码末尾使用
pyglet.app.run()
。它将运行event loop
,运行播放下一首音乐的代码。它还将运行分配给on_eos
等的代码如果您想使用
tkinter
运行它,那么这可能是个问题,因为pyglet
运行事件循环pyglet.app.run()
,它会阻止代码,而tkinter
必须运行自己的事件循环root.mainloop()
,它也会阻止代码。其中一个循环必须在单独的线程中运行—类似于Playing music with Pyglet and Tkinter in Python中的答案我尝试使用这个代码的线程,但当我按下^{中的按钮时,我只播放了第一首音乐。所以我辞职了
我还尝试在
piglet
中构建自己的循环(请参见并添加root.update()
而不是root.mainloop()
,但它需要更多的东西才能正常工作。因此我辞职了对我来说,最好的解决方案是使用
PyQt
,它用于创建GUI
,它有许多wigdet和许多类用于其他任务我使用了一些带有
QMediaPlayer
和QMediaPlaylist
的示例代码,在单击按钮后逐个运行所有音乐。它还具有更改volume
的功能,但我没有测试它它不仅可以加载声音,还可以加载可以在
QVideoWidget
中显示的视频。它还可以直接从internet(URL)加载文件编辑:
我使用
Pyglet
和tkinter
创建了工作代码,使用pyglet.clock.schedule()
定期运行root.update()
相关问题 更多 >
编程相关推荐