【问题标题】:Read amplitude data from mp3从 mp3 读取幅度数据
【发布时间】:2013-07-23 12:40:10
【问题描述】:

我正在尝试编写一些代码,以从 mp3 中提取幅度数据作为时间的函数。不久前,我使用这个函数在 MATLAB 上写了一个粗略的版本:http://labrosa.ee.columbia.edu/matlab/mp3read.html 但是我很难找到一个 Python 等价物。

我已经做了很多研究,到目前为止我已经收集到我需要使用类似 mpg321 的东西来将 .mp3 转换为 .wav。我一直无法弄清楚如何让它发挥作用。

下一步将从 .wav 文件中读取数据,我也没有成功。有没有人做过类似的事情或者可以推荐一些图书馆来帮助解决这个问题?谢谢!

【问题讨论】:

    标签: python python-2.7 mp3 wav


    【解决方案1】:

    您可以使用subprocess模块调用mpg123

    import subprocess
    import sys
    
    inname = 'foo.mp3'
    outname = 'out.wav'
    try:
        subprocess.check_call(['mpg123', '-w', outname, inname])
    except CalledProcessError as e:
        print e
        sys.exit(1)
    

    要读取 wav 文件,您应该使用 wave 模块,如下所示:

    import wave
    import numpy as np
    
    wr = wave.open('input.wav', 'r')
    sz = 44100 # Read and process 1 second at a time.
    da = np.fromstring(wr.readframes(sz), dtype=np.int16)
    wr.close()
    left, right = da[0::2], da[1::2]
    

    之后,leftright 包含相同通道的样本。

    您可以找到更详细的示例here

    【讨论】:

    • 能否详细说明使用subprocess拨打mpg123?谢谢。
    【解决方案2】:

    这是一个纯 Python 项目,您可以在其中解码比实时慢 10 倍的 MP3 文件:http://portalfire.wordpress.com/category/pymp3/

    其余的由傅立叶数学等完成:

    How to analyse frequency of wave file

    看看python模块wave

    http://docs.python.org/2/library/wave.html

    【讨论】:

      【解决方案3】:

      Pymedia 库似乎很稳定,可以满足您的需求。

      【讨论】:

        猜你喜欢
        • 2016-12-12
        • 2012-07-07
        • 1970-01-01
        • 1970-01-01
        • 2011-05-26
        • 1970-01-01
        • 1970-01-01
        • 2023-03-24
        • 1970-01-01
        相关资源
        最近更新 更多