Python 使用Pyglet播放音频文件的子集

Python 使用Pyglet播放音频文件的子集,python,audio,pyglet,Python,Audio,Pyglet,我如何使用pyglet API播放声音文件的子集,例如6秒声音片段的1秒到3.5秒 我可以加载一个声音文件并播放它,还可以寻找所需的间隔开始,但我想知道如何在指定的点停止播放?pyglet似乎不支持设置停止时间。你的选择是: 轮询当前时间,并在到达所需端点时停止播放。这对你来说可能不够精确 或者,使用声音文件库将所需部分提取到临时声音文件中,然后使用pyglet完整播放该声音文件。Python内置了对.wav文件的支持(“wave”模块),或者您也可以使用“sox”之类的命令行工具 pyglet

我如何使用pyglet API播放声音文件的子集,例如6秒声音片段的1秒到3.5秒


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

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

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

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

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

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


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


    由于pyglet中的bug,我最终选择了一个外部音频播放器(afplay,来自OSX开发工具核心音频样本),它可以播放不同格式的文件片段由于pyglet中的bug,我最终选择了一个外部音频播放器(afplay,来自OSX开发工具核心音频样本)它可以播放不同格式的文件片段
    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()