如何使用 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。
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。