2011-07-02 29 views
4

你如何确定哪些音符开始跳动?目前,我所拥有的就像使用所谓的“脉冲列车”的“蛮力”方法。注释开始的节拍检测?

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

现在基本上,我只是使用这些脉冲串来比较和对比在所谓的节拍上发生的Note Onset有多接近。所以一般来说,这个想法是,如果音符起始点更接近拍子位置,则整体差异会更小。然后它只是基本上以最小的整体差异来选择节奏。

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

1.)对于音符起始位置来说,很少有这样的情况,尤其是通过录制的音乐(我正在使用它),这导致了通常较差的结果。

2.)更高的节奏将导致更小的间隔,这导致它成为具有不合拍音节的音乐(即8分音符,16分音符)的更好的候选者,而不是音乐的实际更好节奏(即60bpm,纯第8个音符可能会返回120bpm)

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

+0

看起来像一个不明确的问题。如果整首歌曲是由半音或全音符组成的呢? – Pace

回答

0

我建议检出Dan Ellis'技术。它很直观,在Matlab和Java中有可用的代码。

0

对于很多音乐,“Grove”和“Swing”将及时更改严格节奏位置的音符起始位置。统计模式匹配技术可以使您更好地匹配整个度量或整个短语的频谱模式与音乐的时间偏移副本。那么你仍然需要估计一个除数,从每分钟的措施/短语到每分钟跳动。