4

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

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

现在基本上,我只是使用这些脉冲序列来比较和对比在假定的节拍上发生的音符起始点的接近程度。所以一般来说,这个想法是,如果音符开始发生在靠近节拍位置的地方,整体差异会更小。然后它基本上只是选择总体差异最小的节奏。

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

1.)很少有完美的音符开始位置,尤其是通过录制的音乐(我正在使用),这通常会导致效果较差。

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

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

4

3 回答 3

1

这个页面上有很多有趣的方法。

于 2011-07-02T04:16:13.880 回答
0

我建议检查一下Dan Ellis的技术。它很直观,并且在 Matlab 和 Java 中有可用的代码。

于 2011-07-02T04:54:10.923 回答
0

对于很多音乐,“Grove”和“Swing”会及时从严格的速度位置改变音符开始的位置。一种统计模式匹配技术,将整个小节或整个乐句的频谱模式与音乐的时移副本进行匹配,可能效果更好。然后你仍然需要估计一个除数,从每分钟测量/短语到每分钟节拍。

于 2011-07-02T06:32:05.997 回答