从mp3生成音量曲线

时间:2012-02-13 01:53:45

标签: python waveform

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

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

2 个答案:

答案 0 :(得分:1)

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

问题实际上是PCM解码到MP3之一。据我所知,没有原生的python解码器。但是,您可以使用从python调用的LAME作为子进程,或者使用更多工作,将LAME库直接与SWIG接口连接到Python。这不是一项微不足道的任务。

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

答案 1 :(得分:1)

如果您不想处理mp3文件格式的内部工作原因,我建议您使用Pygame。

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

我发现了一个小技巧 - 请调用pygame.mixer.init,使用与.mp3文件相同的参数(频率,位样本大小和n.of通道),或调用sndarray。数组可能引发异常。

查看http://www.pygame.org/docs/

上的文档