3

我有一组原始声音数据样本,我正在尝试制作一个图形播放器,在播放时显示波形以及音频的进度。

我可以使用 matplotlib 轻松绘制它,并且可以使用 audiolab 播放它,但 audiolab 似乎无法获取播放头的“当前位置”。

有没有能够做到这一点的模块?

4

3 回答 3

1

如果您只想要一个进度条而不是“查找”功能 - 只想显示完成和剩余的工作量,您可以使用 tkintr 轻松构建它并与您现在拥有的任何东西集成。

除此以外,

基本上有两个模块可以为您提供进度条。

http://code.google.com/p/py-audio-gui/wiki/PageName

PyAudio 只播放 MP3。主要缺点。但是更容易使用。

还有一个名为 Snack 的模块,它支持许多不同的格式,并且还具有进度条功能。

这有点难以使用,但我听说他们最近确实提供了一些很好的教程/示例。

因此,如果您愿意,我建议您转向小吃。

干杯。

于 2012-06-29T06:01:03.497 回答
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 线程,异步播放声音文件,然后在父线程中计算当前位置(如上)。要处理播放失败的情况,请将调用包装scikits.audiolab.play()在异常处理程序中,然后threading.Event在 play() 调用失败时将事件传递给父线程。

在父线程中,您需要event.isSet()相应地检查:

if current_location >= 1 or fail_event.isSet():
    break
于 2012-07-01T11:31:41.880 回答
-1

我找到了一个很好的代码,它能够运行你正在寻找的东西。这是链接: https ://gist.github.com/deeplycloudy/2152643 我无法运行作者的代码,但我在该存储库下方的评论中进行了一些更正。

萨鲁多斯!!

于 2018-05-25T01:18:06.103 回答