python - 如何使用 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
预期结果:
音频应该与从生成器返回的声音循环播放。
当前结果:
音频播放一次。
问题:
我在这里做错了什么以及如何达到预期的结果?
解决方案
不确定您是否要完成更多工作,但如果您从循环中需要的只是循环声音,那么您实际上不应该使用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并设置循环标志。
推荐阅读
- c++ - 调用继承参数包的模板构造函数
- r - 找不到功能 dtwclust R
- amazon-web-services - 如何删除失败的 .ebextensions 脚本?
- angular - ionic : 离子后退按钮上的清除文本字段
- javascript - 如何设置一个逻辑以从给定代码呈现组件
- angular11 - core.js:6210 错误类型错误:无法读取 null 的属性“writeValue”
- pentaho-report-designer - 有没有办法在日期选择器中禁用未来日期而不在 pentaho 报表设计器中使用 JavaScript 和 jquery
- valueerror - 网格搜索期间的值错误 - epochs 不是合法参数
- c# - 如何在 C# 的计时器处删除小数点
- javascript - 我们如何在本机反应中同时检测两个触摸事件