2

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

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

4

2 回答 2

1

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

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

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

于 2012-02-13T02:35:41.453 回答
1

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

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

我发现了一个小技巧——请务必使用与 .mp3 文件相同的参数(频率、位样本大小和通道数)调用 pygame.mixer.init,否则对 sndarray.array 的调用可能会引发一个例外。

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

于 2012-02-13T02:59:58.017 回答