音符开始时的节拍检测?

时间:2011-07-02 04:07:13

标签: audio signal-processing onset-detection

如何确定哪些Note Onsets是节拍?目前,我所拥有的有点像使用所谓的“脉冲序列”的“强力”方法。

基本上,我们的想法是,您可以从最小速度到最大速度生成脉冲序列。这些脉冲序列只是在特定节奏中发生节拍的表示。例如,如果Tempo = 60bpm(每分钟节拍),则脉冲序列具有以1秒(60/60 bpm)的间隔发生的节拍。对于Tempo = 120bpm,脉冲序列的跳动间隔为0.5秒(60 / 120bpm)。

现在基本上,我只是使用这些脉冲序列来比较和对比在所谓的节拍上发生的接近音符。一般来说,这个想法是,如果音符开始发生在更接近节拍位置,则整体差异将更小。然后它基本上选择了具有最小整体差异的速度。

但是,我遇到了两个有关此实现的问题。

1。)音符开始的完美位置很少,特别是通过录制的音乐(我正在使用),这导致通常较差的结果。

2。)较高的节奏将导致较小的间隔,这使其成为具有非节拍开始(即第8音符,第16音符)的音乐的更好的候选者,而不是音乐的实际更好的节奏(即60bpm,纯粹的8号音符可能会返回120bpm)

你能推荐一些其他(甚至简单的)节拍检测方法吗?我想自己实现该算法以获得经验,因此非常感谢有用的教程链接。谢谢!

3 个答案:

答案 0 :(得分:1)

this page上有很多有趣的方法。

答案 1 :(得分:0)

我建议查看Dan Ellis'技巧。它很直观,Matlab和Java提供了代码。

答案 2 :(得分:0)

对于很多音乐,“Grove”和“Swing”将在严格的节奏位置及时改变音符开始的位置。统计模式匹配技术,您可以将整个度量或整个短语的频谱模式与时移的音乐副本相匹配,从而可以更好地工作。然后你还需要估算一个除数,从每分钟的度量/短语到每分钟的节拍。