如何使用 Pyglet 播放音频(在生成器循环中)?

How to play audio(in generator loop) with Pyglet?

pyglet 版本 - 1.4.2.
Python - 3.6.6
Ubuntu - 18.04

代码示例:

import pyglet
import time

pyglet.options['audio'] = ('openal', 'pulse', 'directsound', 'silent')
source = pyglet.media.StaticSource(pyglet.media.load('explosion.wav'))

def my_playlist():
    while True:
        print(time.time())
        print(1)
        yield source


player = pyglet.media.Player()
player.queue(my_playlist())
player.play()

pyglet.app.run()

代码是根据documentation编写的:

控制台中的日志:

1566296930.8165386  # played once
1
1566296931.529639  # won't play
1
1566296931.5301056  # won't play and etc.
1
1566296931.5304687
1
1566296931.5309348
1

预期结果:

音频应与从发生器返回的声音一起循环播放。

当前结果:

音频播放一次。

问题:

我这里做错了什么以及如何达到预期的结果?

不确定您是否想完成更多的事情,但是如果您的循环只需要循环播放声音,那么您实际上不应该使用任何类型的 loop。相反,使用指定的 EOS_LOOP flag/trigger.

import pyglet
import time

pyglet.options['audio'] = ('openal', 'pulse', 'directsound', 'silent')
source = pyglet.media.StaticSource(pyglet.media.load('explosion.wav'))

player = pyglet.media.Player()
player.queue(source)
player.EOS_LOOP = 'loop'
player.play()

pyglet.app.run()

由于它已被弃用,您应该转而使用设置了循环标志的 SourceGroup