2

現在、パーカッションのチュートリアル プログラムを開発しています。このプログラムでは、どのドラムが演奏されているかを判断できる必要があります。これを行うには、ドラム録音の周波数を分析し、周波数が特定の範囲内にあるかどうかを確認します。

私はこれまで FFT に Apache math commons の実装を使用してきました (http://commons.apache.org/math/) が、私の質問は、FFT を実行したら、結果の配列を使用して周波数を計算するにはどうすればよいかということです。信号に含まれていますか?

注: 自己相関の使用も試してみましたが、ドラム キットのサンプルではうまく機能しないようでした。

どのドラムが叩かれているかを判断する方法についてのヘルプまたは代替提案は大歓迎です

編集:これを書いて以来、Javaでの時間/周波数変換のためのJavaでのFFTの実装に関する素晴らしいオンラインレッスンを見つけましたJavaでのスペクトル分析

4

2 に答える 2

5

音楽情報検索の分野では、メル周波数ケプストラム係数(MFCC) として知られる関連するメトリックがよく使用されます。

信号の任意の N サンプル セグメントについて、FFT を実行します。得られた N 個のサンプルは、たとえば 12 個の要素 (つまり、係数) を含む MFCC のセットに変換されます。この 12 要素のベクトルは、どのドラムが使用されているかなど、楽器を分類するために使用されます。

教師付き分類を行うには、サポート ベクター マシン(SVM) のようなものを使用できます。LIBSVMは、Java 互換 (および他の多くの言語) を持つ一般的に使用されるライブラリです。これらの MFCC とそれに対応する機器ラベルを使用して SVM をトレーニングします。次に、クエリ MFCC ベクトルをフィードしてテストすると、それがどの楽器であるかがわかります。

要約すると、基本的な手順は次のとおりです。

  1. FFT を取得します。
  2. FFT から MFCC を取得します。
  3. MFCC と機器ラベルを使用して SVM をトレーニングします。
  4. クエリ信号の MFCC を使用して SVM をクエリします。

これらのことを行う Java パッケージを確認してください。(それらは存在するに違いありません。私はそれらを知りません。)比較的、ドラム トランスクリプションは他のほとんどの楽器グループよりも簡単なので、これがうまくいくと私は楽観的です。

さらに読むために、ドラムの転写に関する記事がたくさんあります。

于 2010-12-20T16:52:22.403 に答える