从mp3读取振幅数据

时间:2013-07-23 12:40:10

标签: python python-2.7 mp3 wav

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

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

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

这是纯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

答案 2 :(得分:1)

Pymedia库似乎很稳定,可以处理您需要的内容。