私が達成しようとしているのは、オーディオファイル内の別々の音符を区別することです。簡単にするために、2つの音符が次々に演奏されると言うことができる。主な質問は、次の音符がいつ演奏されるかを決める方法です。
私がすでに行ってきたことは、オーディオファイルからサンプルを読み込み、JTransformsライブラリを使ってそれらのサンプルに対してフーリエ変換を行うことです。ここに私が得るものがある:
。
次に、FFTから返されたデータに基づいてスペクトルを計算しました。これは私が得たものです:
。
グラフの大きな「列」には高調波があり、小さなものにはノイズとその他の高調波の倍音があります。注意点FFTアルゴリズム
その後、私はオーディオファイルと同じ処理をしようとしましたが、2つの音符が次々と再生されましたが、結果は同じでした。
このようなデータを視覚化するための軽量で高速なライブラリをご存知の方はいらっしゃいますか?より大きなデータセットにJFreeChartを使用することは、私のプロセッサにとって大きな苦痛です。
音符を特定する場合は、[**ピッチ検出**](https://en.wikipedia.org/wiki/Pitch_detection_algorithm)を実行する必要があります。ピッチは周波数と同じではありません。基本成分(f0)の周波数と同じことさえありません。ピッチ検出の一般的な方法であるHarmonic Product Spectrumを読んでください。 –
私はこれが信号処理に関係していると信じています。 私はあなたがフィルターを適用する必要があると思う(周波数が信号に存在するかどうかを確認するためにバンドパスフィルターのように)。基本的にA、B、C、Dなどを確認するためにバンドパスフィルターを使用してください。 FFTを使用すると、特定の音符が周波数基準であるため、別の音符より前に演奏されたかどうかを知る方法がありません。 (バンドパスフィルタを使用して)ノートを見つけるまで、そして同じメソッドを適用する別の時間サンプルを取るまで、信号をチェック(FFTを適用)してみてください。 計算コストがかかるかどうかわかりません。 –
@PaulRここでは、stackoverflowでシグナル処理についてのあなたの記事をたくさん見ましたが、この分野で研究を分かち合うことを決めたのであれば、何らかのブログがありますか?私はstackoverflow以外の何かを介してあなたと連絡を取ることができますか?私は現在、ピッチ認識、音声認識、ニューラルネットワークを含む多くのサブプロジェクトを持ち、インターネット上の情報の一部を読み上げる巨大なプロジェクトに取り組んでいます。 –