我有一系列原始声音数据样本,我正在尝试创建一个图形播放器,显示波形以及播放时音频的进度。
我可以用matplotlib轻松地绘制它,我可以用audiolab播放它,但是audiolab似乎无法获得播放头的“当前位置”。
是否有任何模块能够做到这一点?
答案 0 :(得分:1)
如果你只想要一个进度条而不是一个“搜索”功能 - 只想显示已完成和剩下多少,你可以使用tkintr轻松构建它并与现有的任何东西集成。
否则,
基本上有两个模块可以为您提供进度条。
PyAudio只播放MP3。主要缺点。但更容易使用。
还有另一个名为Snack的模块,它支持许多不同的格式,并且还具有进度条功能。
这有点难以使用,但我听说他们最近确实提供了一些很好的教程/样本。
所以,如果你愿意的话,我会建议转移到Snack。
干杯。
答案 1 :(得分:1)
如果您知道音频帧数和采样率,则无需使用audiolab告诉您当前位置,您可以计算它。
Sndfile.frames / Sndfile.samplerate
将以秒为单位为您提供文件的持续时间,然后您可以结合自声音文件开始以来计算相对当前位置以来经过的时间。说明原则:
import time
start_time = time.time()
duration_s = sndfile.frames / sndfile.samplerate
while 1:
elapsed_time = time.time() - start_time
current_location = elapsed_time / float(duration_s)
if current_location >= 1:
break
time.sleep(.01)
要在实践中实现这一点,您可以使用Python threading异步播放声音文件,然后计算父线程中的当前位置(如上所示)。要处理回放失败的情况,请在异常处理程序中将您的调用包装到scikits.audiolab.play()
,然后使用threading.Event
将事件传递给父线程,如果/当play()调用失败时。
在父线程中,您需要相应地检查event.isSet()
:
if current_location >= 1 or fail_event.isSet():
break
答案 2 :(得分:-1)
我找到了一个能够运行你想要的代码的好代码。 链接在这里: https://gist.github.com/deeplycloudy/2152643 我无法运行作者的代码,但我在该存储库下面的注释中做了一些更正。
Saludos !!