如何用C或Python找出mp3的BPM
大家好,我现在在做一个项目,需要一个程序来加载一个mp3文件,找出它的每分钟节拍数(BPM),然后把这个值返回给我。我比较喜欢用C语言,但用Python也可以。我现在遇到瓶颈,真的需要你们的帮助。这是一个iOS应用(音乐播放器),我想利用歌曲的BPM来帮助创建播放列表。我不想要Xcode的解决方案,需要用C语言编程,然后把C代码嵌入到我的iOS应用中。希望大家能帮帮我。
3 个回答
如果你运气好的话,可以从嵌入的元数据中读取到这些信息。比如说,ID3v2格式里有一个叫TBPM的标签,可以存放这个值。不过,音频文件并不一定要包含这些数据,所以这算是个不太可靠的解决办法。
BPM(每分钟节拍数)并不是一种可以直接从文件中读取的技术东西。
你可以尝试通过分析原始音频数据来获取一些信息,
比如音量、频率等等,然后运用一些经验法则,但这样做有几个问题:
a) 不一定准确,b) 过程比较复杂。
要仅仅通过读取mp3文件来检测节拍并不是一件简单的事情。你首先需要研究各种节拍检测算法,找到适合你需求的那一个。你可以参考一下这个链接。
另外,这篇文章很好地解释了一种节拍检测算法,链接在这里:http://www.flipcode.com/misc/BeatDetectionAlgorithms.pdf
你还需要一个音频/视频框架来解码mp3文件。FFMS2可以从mp3文件和视频文件中获取解码后的音频样本。
https://code.google.com/p/ffmpegsource/
处理这些原始样本时,你可以使用Portaudio这个开源框架,或者自己动手做。
以上两个框架都很容易使用和设置。
除此之外,你还可以看看Audacity中现有的节拍查找实现,Audacity是一个非常优秀的开源音频分析工具。
http://audacity.sourceforge.net/
希望以上信息对你有帮助。