用进度条播放声音数据的Python模块?

标签 python audio

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

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

是否有任何模块能够执行此操作?

最佳答案

如果您知道音频帧数和采样率,则不需要 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

关于用进度条播放声音数据的Python模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11255432/

相关文章:

c++ - 带有位置通知的音频流

android - 覆盖通知声音Android

python - 如何检查线程当前是否持有 GIL?

python - 在不包括某些数字的范围内生成随机数

python - 为什么我的 Python 代码只添加购物车中最后一件商品的价格?

python - 如何创建一个方法来显示带有数据的链表和指向屏幕上下一个节点的指针?

python - Asyncio协程从未等待错误

ruby-on-rails - 将mp3转换为flac文件

iphone - iphone-AVAudioPlayer重叠

delphi - 主动降噪