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

时间:2009-12-29 23:15:56

标签: python audio pyglet

如何使用pyglet API声音来播放声音文件的子集,例如从1秒到6秒钟的6秒声音片段?

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

这种方法似乎有效:不是手动轮询当前时间以停止播放,而是使用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()