如何用 C 或 python 找出 mp3 的 bpm [关闭]

Posted

技术标签:

【中文标题】如何用 C 或 python 找出 mp3 的 bpm [关闭]【英文标题】:How to find out bpm of an mp3 with C or python [closed] 【发布时间】:2014-03-09 10:05:09 【问题描述】:

大家好,我目前正在做一个项目,我需要一个程序来加载一个 mp3 文件,找出它的 bpm(每分钟节拍数)并将该值返回给我。首选语言是 C,但 python 也可以工作。我真的被困在这真的可以使用你的帮助。这是一个 ios 应用程序(音乐播放器),我想使用歌曲的 bpm 来帮助创建播放列表。不是在寻找 Xcode 解决方案。需要在 C 中编程,然后将 C 嵌入到我的 IOS 应用程序中。真的可以使用一些帮助家伙。

【问题讨论】:

【参考方案1】:

没有直接的方法可以仅通过读取 mp3 文件来检测节拍。你首先需要探索 各种节拍检测算法,并找到适合您要求的一种。 您可以从中获得一些帮助。

How to detect the BPM of a song in php

这篇特别的文章也很好地解释了一种这样的节拍检测算法 http://www.flipcode.com/misc/BeatDetectionAlgorithms.pdf

您还需要掌握一些音频/视频框架来解码 mp3 文件。 FFMS2 给你解码 来自 mp3 文件和视频文件的音频样本。

https://code.google.com/p/ffmpegsource/

要处理这些原始样本,您可以帮助 Portaudio 开源框架,也可以自己完成。

http://www.portaudio.com/

上述两个框架都易于使用和设置。

除此之外,您还可以查看 Audacity 中节拍查找器的现有实现,这是一个优秀的 用于分析音频的开源工具。

http://audacity.sourceforge.net/

希望以上信息对您有所帮助。

【讨论】:

谢谢@praks411。这消除了我对如何解决这个问题的许多困惑。【参考方案2】:

BPM 不是可以从文件或类似文件中读取的技术内容。 您可以尝试通过分析原始音频数据来获取一些信息 (即幅度、频率...)并应用启发式方法,但那是 a) 不一定准确 b) 复杂。

【讨论】:

【参考方案3】:

如果幸运的话,您可以从嵌入的元数据中读取该信息。例如,ID3v2 有一个 TBPM 标签,可以保存该值。但是音频文件不需要包含这些数据,所以它充其量只是一个不稳定的解决方案。

【讨论】:

此外,BPM 元数据中有一个重要假设:音轨具有恒定的节奏。 非常正确,但这似乎是 OP 的假设。

以上是关于如何用 C 或 python 找出 mp3 的 bpm [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何用Python或C++编程实现在一组小数中找出最接近的两个数?

如何用bat批量去掉文件名的后缀

如何用python找出10000以内的全部回文数

如何用C语言播放一段音频呢

如何用python异或二进制

如何用GoldWave批量删除mp3文件开头65秒?