【问题标题】:Play Subset of audio file using Pyglet使用 Pyglet 播放音频文件的子集
【发布时间】:2009-12-31 04:32:38
【问题描述】:

如何使用 pyglet API for sound 播放声音文件的子集,例如一个 6 秒的声音片段从 1 秒到 3.5 秒?

我可以加载一个声音文件并播放它,并且可以寻找到所需间隔的开始,但我想知道如何在指定的点停止播放?

【问题讨论】:

    标签: python audio pyglet


    【解决方案1】:

    pyglet 似乎不支持设置停止时间。您的选择是:

    1. 轮询当前时间并在到达所需端点时停止播放。这对您来说可能不够精确。
    2. 或者,使用声音文件库将您想要的部分提取到临时声音文件中,然后使用 pyglet 完整播放该声音文件。 Python 内置了对 .wav 文件(“wave”模块)的支持,或者您可以使用命令行工具,如“sox”。

    【讨论】:

    • 由于 pyglet 中的错误,我最终选择了一个外部音频播放器(afplay,来自 OSX 开发工具 Core Audio 示例),它可以播放各种格式的文件片段
    【解决方案2】:

    这种方法似乎有效:与其手动轮询当前时间以停止播放,不如使用 pyglet 时钟调度程序在给定时间间隔后运行一次停止回调。这对于我的用例来说已经足够精确了 ;-)

    player = None
    
    def stop_callback(dt):
      if player != None:
        player.stop()
    
    def play_sound_interval(mp3File, start=None, end=None):
      sound = pyglet.resource.media(mp3File)
      global player
      player = pyglet.media.ManagedSoundPlayer()
      player.queue(sound)
      if start != None:
        player.seek(start)
      if end != None and start != None:
        pyglet.clock.schedule_once(stop_callback, end-start)
      elif end != None and start == None:
        pyglet.clock.schedule_once(stop_callback, end)
      player.play()
    

    【讨论】:

      猜你喜欢
      • 2018-11-22
      • 2021-04-14
      • 2012-07-31
      • 2021-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多