用Python分析mp3文件频率
我正在尝试写一个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
经过进一步研究,我发现这些内容与MP3文件的头部信息和数据有关,具体可以参考这个维基百科页面:http://en.wikipedia.org/wiki/MP3#File_structure
我该如何利用这些信息来提取文件的频率数据呢?
另外,我特别想分析MP3文件,而不是WAV文件。虽然可以把MP3转换成WAV格式再进行处理,因为有Python模块可以处理WAV文件,但有没有不需要转换的解决方案呢?
提前谢谢大家。
2 个回答
如果你想制作一个声谱图,numpy有一个叫fftpack的模块(我记得是这样 - FFT是快速傅里叶变换的缩写),它可以把一个随时间变化的振幅函数转换成一个随频率变化的振幅函数。如果你写一个程序,让它在非常短的时间间隔内反复执行这个操作,你可以把所有这些数据放进一个数组里,然后进行分析。
如果你只是想获取采样率,你需要找到文件的头部,通常它以"fff"或"ffe"开头(但不一定总是在最开始的位置)。采样率的信息在头部的第六个字节里,具体的解释可以在这里找到:http://www.multiweb.cz/twoinches/mp3inside.htm
如果你选择使用 .wav 格式的音频文件,Python 有一个标准库可以处理这些文件,具体可以查看这个链接:https://docs.python.org/2/library/wave.html。我之前试过这个库,觉得用起来非常简单。
如果你要处理 mp3 格式的音频文件,可以考虑使用 mutagen 这个包,详细信息可以在这里找到:https://github.com/quodlibet/mutagen
另外,这个 StackOverflow 的问题可能对你有帮助:将音频文件导入 Python 并转换为 NumPy 数组(替代 audiolab 的方法)