使用python分析mp3文件的频率

时间:2014-04-10 10:01:58

标签: python audio mp3 frequency-analysis

我正在尝试编写一个Python脚本来读取MP3文件并对其中的频率进行一些分析。特别是,我想要一个频谱图(频率与时间)作为输出。

然而,当我使用open()读取文件并将内容传送到文件时,我得到了这样的内容:

3763 1e65 0311 1814 b094 d3e3 25b3 641b
15a1 f146 62d6 ade6 7708 c5ec 1a0d 7395
201c 46e6 65a9 5276 688a 47eb 80e8 617e
4d66 2d82 2677 f74e e664 6220 69fa 1b46

在进一步的研究中,我认为这些与这个wiki中讨论的MP3标题和数据有某种关联:http://en.wikipedia.org/wiki/MP3#File_structure

如何使用此信息提取文件的频率数据?

PS:我特别想分析MP3文件,而不是WAV文件。解决方法是将MP3转换为WAV格式,然后再进行处理,因为有一个Python模块来处理WAV文件。但如果没有这种转换,是否有解决这个问题的方法?

提前致谢。

2 个答案:

答案 0 :(得分:2)

如果你使用.wav文件,有一个python标准库可以处理它们(https://docs.python.org/2/library/wave.html)。我过去曾经玩过它,发现它很容易使用。

对于mp3,mutagen包是一个选项https://github.com/quodlibet/mutagen

另外,这个SO问我的帮助:Importing sound files into Python as NumPy arrays (alternatives to audiolab)

答案 1 :(得分:0)

如果您正在尝试创建频谱图,numpy有一个名为fftpack的模块(我认为--FFT是快速傅立叶变换的简称),可以将幅度函数随时间转换为幅度随频率的函数。如果你创建一个在很短的时间间隔内重复迭代的程序,你可以把所有这些都扔进一个数组并从那里进行分析。

如果你只是想获得采样率,你需要找到标题,通常以" fff"或" ffe" (它不一定总是在开头。)采样率信息在标题的第六个字节中,所有这些都在这里解释:http://www.multiweb.cz/twoinches/mp3inside.htm