2012-02-13 90 views
2

我想在python中构建一些可以分析上传的mp3并生成必要的数据来构建波形图形的东西。我发现的一切都比我需要的复杂得多。最终,我正在尝试构建像你在SoundCloud上看到的东西。从mp3生成音量曲线

我一直在寻找numpyfft's,但这一切似乎比我需要更复杂。最好的办法是什么?我将使用画布构建实际的图形,所以不要担心它的那一部分,我只需要绘制数据。

+1

'fft'是针对光谱的。为了绘制音量,你可以从字面上使用波形本身(或者它是方形的,在技术上更精确)。 – wim 2012-02-13 01:57:06

+0

这种证实了我的怀疑。你能详细阐述一些细节(首选模块,“方形”或其他有用的东西)吗? – Scott 2012-02-13 02:04:39

+0

您需要将mp3文件解码为PCM波形,您可以将其存储在“numpy”数组中。 – wim 2012-02-13 02:08:19

回答

1

MP3文件是波形的编码版本。在使用波形之前,您必须先将MP3数据解码为PCM波形。一旦获得PCM数据,每个采样代表该时间点的波形幅度。如果我们假设MP3解码器输出带符号的16位值,则幅度范围将从-16384到+16383。如果通过将每个样本除以16384来标准化样本,则波形样本的范围将介于+/- 1.0之间。

这个问题确实是MP3解码到PCM的问题之一。据我所知,没有本地的Python解码器。但是,您可以使用LAME,从python调用它作为子流程,或者稍微多做一些工作,将LAME库直接连接到像SWIG之类的Python。不是一项简单的任务。

绘制该数据然后成为读者的练习。

1

我建议你使用Pygame,如果你不想处理MP3文件格式的内部工作。

Pygame是一个多媒体库,可以打开常见的音频文件格式 - 包括.mp3和.ogg作为“声音”对象 - 如果你有Numpy安装在下面,你可以浏览未压缩的(因此,后fft转换)声音,使用pygame.sndarray.array调用 - 它会返回一个带有声音样本的numpy数组对象。

我发现了一个小窍门 - 请确保您的.mp3文件具有相同的参数(用于频率,位采样大小和n.of声道)或调用sndarray时调用pygame.mixer.init .array可能会引发异常。

检查文档http://www.pygame.org/docs/