.NETでリアルタイムピッチ検出を行うにはどうすればよいですか?
-
26-09-2019 - |
質問
マイクの前で再生されているメモを検出するプログラムを作成したいと思います。 NaudioのFFT関数をテストしていますが、Audacityで行ったテストでは、FFTはピッチを正しく検出しないようです。 C5をプレイしましたが、最高のピックはE7でした。
周波数分析ウィンドウの最初のドロップダウンボックスを「エニングされた自己相関」に変更し、その後最高のピックはC5でした。
私は「エンカンスの自己相関」をグーグルで検索しましたが、運はありませんでした。
解決
オーディオスペクトルの最高のピークは、人間がそれを知覚するため、特に強い倍音のある音でそれを知覚するため、必ずしも音楽ピッチではありません。それは、ピッチが人間の心理的知覚現象であるため、脳はしばしば波形にさえ存在しない周波数を推測することがよくあります。
周波数またはピッチの推定の自動相関方法(大まかに、面白い見栄えや非シヌソイド波形の繰り返しでさえ、どれだけ離れているかを時間内に繰り返します)は、通常、人間がピッチと呼ぶものに適しています。自己相関アルゴリズムのさまざまな機能強化の理由は、単純な自己相関がほぼ無限の数の繰り返し波長を見つけることです(たとえば、1秒ごとに繰り返す場合、2秒ごとに2回繰り返すなど)。どういうわけか、人間が同じ波形について推測するものと統計的によく一致します。
他のヒント
あなたはおそらくハーモニクスに捨てられています。ナウディオのFFTが球場にあるかどうかを確認するために、正弦波でテストを試みましたか?
これらの参照を参照してください:http://cnx.org/content/m11714/latest/
http://www.gamedev.net/community/forums/topic.asp?topic_id=506592&whichpage=1�
行48インチ Spectrum.cpp
Audacityソースコードは、あなたが望むものに近いようです。また、Anを参照します TolonenとKarjalainenによるIEEE論文.
さて、GPLV2と一緒に暮らすことができるなら、Audacityソースコードを覗いてみませんか?