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

1 投票
2 回答
1205 浏览
提问于 2025-04-15 17:28

我该如何使用pyglet这个声音处理的工具来播放声音文件的一部分,比如从1秒到3.5秒的6秒长的声音片段?

我可以加载一个声音文件并播放它,也能找到我想要的播放区间的开始位置,但我在想要怎么在指定的时间点停止播放呢?

2 个回答

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()
1

看起来 pyglet 这个库并不支持设置停止播放的时间。你可以考虑以下几种方法:

  1. 可以不断检查当前时间,当到达你想要的结束点时停止播放。不过,这种方法可能不够精确。
  2. 或者,你可以使用一个音频文件库,把你想要的那部分音频提取出来,保存成一个临时的音频文件,然后用 pyglet 播放这个完整的音频文件。Python 自带支持 .wav 文件(也就是“wave”模块),或者你也可以使用一个命令行工具,比如“sox”。

撰写回答