Pyglet 播放兑现的声音

Pyglet plays cashed sounds

我有一个简单的代码来播放音频,但 pyglet 似乎保存了所有音频,并且每次它尝试播放新音频时,所有以前的音频都会同时播放。

import pyglet

def plays(name):
    file = pyglet.resource.media(name + '.mp3')
    file.play()
    pyglet.app.event_loop.sleep(1)


plays('definite')
plays('filling-your-inbox')

有什么办法可以玩第二个而不重玩第一个吗?

声音没有缓存,您使用的代码也不是很有用。如果你仔细听,你的两个文件实际上都在播放并且相互重叠。区分这一点的最简单方法是让第一个是缓慢柔和的曲调,然后是第二个是尖锐的短促声音 - 你会更容易注意到它。

另一个问题是您正在循环播放函数,而没有真正使用正确的事件循环。一个更合适的例子是做这样的事情:

import pyglet, signal

media_player = pyglet.media.Player()

def queue(name):
    file = pyglet.resource.media(name + '.mp3')
    media_player.queue(file)

def on_eos(*args, **kwargs):
    pyglet.app.exit()
media_player.on_player_eos = on_eos


queue('definite')
queue('filling-your-inbox')
media_player.play()
pyglet.app.run()

旁注是您可能应该使用推送事件处理程序,而不是像我那样只是替换函数,我有点匆忙所以它有点难看,但它有效:)