【问题标题】:how to use pyglet to play sound in a mayavi animation?如何使用 pyglet 在 mayavi 动画中播放声音?
【发布时间】:2019-07-05 05:39:40
【问题描述】:

我想在 mayavi 动画循环中使用 pyglet 播放声音,但我发现 pyglet 与必须在 mayavi 动画中使用的 'yield' 配合得不好。情况是,当声音播放和动画完成一次时,它无法开始一个新的循环,这是我的一些代码,有什么想法吗?

pyglet 可以在 for 循环中播放声音,但不能使用 yield

@mlab.animate(delay=delays)
def animate():
    f = mlab.gcf()
    while True:
        for i in range(frames_num): 
            # update sound
            sound = 'shiping/shiping_%d.wav'%i
            sound_adjust = pyglet.resource.media(sound, streaming=False)
            sound_adjust.play()

            # update scene
            print('Update scene >>', time.time())
            function_to_update_scene()
            # with out 'yield' it works well
            yield
animate()

也可以接受任何其他模块的建议。问题是我需要在 20 毫秒内快速更新声音。

【问题讨论】:

  • 看来您必须在单独的进程中播放声音,使用queues 或类似的方式发送“立即播放”命令。
  • 我对多线程不熟悉,让我试一试。谢谢你,费利佩。

标签: python yield pyglet mayavi


【解决方案1】:

我终于通过使用winsound 模块解决了这个问题。使用

winsound.PlaySound(sound, winsound.SND_FILENAME | winsound.SND_ASYNC)

替换

sound_adjust = pyglet.resource.media(sound, streaming=False) 
sound_adjust.play()

异步播放定义的声音。当然,你必须在一开始就import winsound

【讨论】:

  • 您能否扩展此答案,例如通过解释你是如何准确解决它的,例如根据您提供的代码?它将极大地帮助其他人重现您的解决方案。
  • 如果它解决了您的问题,请随意标记它(答案上的绿色勾号)。这将向其他人证明该特定答案回答了您的问题。 :)
  • 谢谢你教我。我是堆栈溢出的新手,不擅长英语:)
猜你喜欢
  • 2021-04-14
  • 2018-11-22
  • 1970-01-01
  • 2014-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多