どのノートオンセットがビートであるかをどのように判断しますか? 現在、私が持っているのは、いわゆる「パルストレイン」を使用した「ブルートフォース」メソッドのようなものです。
基本的には、最小テンポから最大テンポまでのパルス列を生成するという考え方です。これらのパルス列は、特定のテンポでビートが発生するタイミングを表しています。たとえば、Tempo = 60bpm (1 分あたりのビート) の場合、パルス列には 1 秒間隔 (60 / 60 bpm) で発生するビートがあります。Tempo = 120bpm の場合、パルス列には 0.5 秒間隔 (60 / 120bpm) で発生するビートがあります。
基本的に、これらのパルス列を使用して、想定されるビートでノートオンセットがどれだけ近いかを比較対照します。したがって、一般的には、音符の開始が拍の位置に近いほど、全体的な差は小さくなるという考えです。次に、基本的に全体的な違いが最小のテンポを選択します。
ただし、この実装に関して 2 つの問題に遭遇しました。
1.) 特に録音された音楽 (私が取り組んでいる) では、音符の開始点に完璧な位置を設定することはめったにありません。
2.) テンポを高くすると間隔が狭くなり、実際の音楽のより良いテンポ (純粋に8 分音符はおそらく 120bpm を返します)
ビート検出の他の (単純な) 方法を提案できますか? 経験を積むためにアルゴリズムを自分で実装したいので、チュートリアルへの役立つリンクは大歓迎です。ありがとうございました!