首页 > 解决方案 > 如何使用 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()

代码是根据文档编写的:

登录控制台:

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

预期结果:

音频应该与从生成器返回的声音循环播放。

当前结果:

音频播放一次。

问题:

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

标签: pythonpython-3.xaudiopyglet

解决方案


不确定您是否要完成更多工作,但如果您从循环中需要的只是循环声音,那么您实际上不应该使用loop任何类型的 a 。相反,使用指定的EOS_LOOP标志/触发器。

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并设置循环标志。


推荐阅读