1

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

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

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

4

3 回答 3

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包含相同通道的样本。

您可以在此处找到更详细的示例。

于 2013-07-23T12:47:59.873 回答
1

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

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

如何分析波形文件的频率

看看python模块wave

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

于 2013-07-23T12:50:24.087 回答
1

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

于 2013-07-23T12:52:44.207 回答