使用 .Net 编程获取音频文件(波形或 MP3)的 BPM

7

我有一个项目,需要使用 .Net (VB.Net 或 C#) 编程获取波形或 MP3 文件的BPM。

有没有人知道这方面的二进制文件或库,或者有代码片段可以指导我正确的方向?


这并不是特定于 .net 的问题,但在这个问题中有许多有用的信息和建议的算法:如何通过编程检测歌曲的BPM - Simon P Stevens
@BS:非常简单:你只需要进行FFT(快速傅里叶变换),并分析转换后的数据(在数组中进行一个微不足道的搜索,寻找最大值)。我用Java编写了自己的FFT,大约只有40行代码左右(具体记不清了,因为那是很久以前的事情,但确实很短)。这类似于通过分析汽车的噪音(比如一辆方程式赛车)来确定发动机转速(但在汽车发动机的情况下,你需要知道汽车有多少个气缸)。我曾经做过这样的事情,用Java分别确定.wav文件的BPM和汽车发动机的RPM,那还是上个世纪的事情 ;) - SyntaxT3rr0r
3个回答

2

在获取WAV或MP3样本的.NET代码部分,我使用NAudio(在CodePlex上),它是免费的,可用于商业应用程序,但没有真正的文档,只有示例代码。


2

首先,如果您想使用.Net进行声音处理,我建议使用fmod,它非常棒并且有.Net封装(http://www.fmod.org)。

接下来,获取BPM的方法有几种,但我认为最有效的是“节拍谱”(在此处描述:http://www.rotorbrain.com/foote/papers/icme2001/icmehtml.htm)。

该算法通过将每个短音乐样本与其他所有样本进行比较来计算相似性矩阵。一旦计算出相似性矩阵,就可以获得每个时间间隔T中每个样本对{S(T); S(T + 1)}之间的平均相似度:这就是节拍谱。节拍谱中的第一个高峰大多数情况下是节拍持续时间。最好的部分是您还可以进行音乐结构或节奏分析等操作。

如果您对此领域感兴趣,我建议阅读其他Jonathan Foote的论文。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接