我正在尝试在python中构建一些东西,可以分析上传的mp3并生成必要的数据来构建波形图形。我发现的一切都比我需要的复杂得多。最终,我正在尝试构建像你在SoundCloud上看到的东西。
我一直在调查numpy
和fft's
,但这看起来比我需要的更复杂。什么是最好的方法?我将使用画布构建实际图形,所以不要担心它的那一部分,我只需要绘制数据。
答案 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。数组可能引发异常。
上的文档