オーディオ ストリームからピッチ データを抽出しようとしています。私が見る限り、FFT が使用するのに最適なアルゴリズムであるように見えます。
数学を直接掘り下げるのではなく、誰かがこの FFT アルゴリズムの機能を理解するのを手伝ってくれませんか?
「FFT は生の信号から周波数データを抽出します」のような明白なことは言わないでください。次のレベルの詳細が必要です。
何を渡し、何を取り出すか?
インターフェイスを明確に理解すると、実装を理解するのに役立ちます。
オーディオ バッファーに渡す必要があると思います。各計算に使用するバイト数を伝える必要があります (たとえば、このバッファーからの最新の 1024 バイト)。検出するピッチの範囲を指定する必要があるかもしれません。今、それは何を返しますか?周波数ビンの配列?これは何?
(編集:) 使用する C++ アルゴリズムを見つけました (理解できる場合のみ)
Performousは、マイクからピッチを抽出します。また、コードはオープンソースです。これは、アルゴリズムをコーディングした人による、アルゴリズムの機能の説明です。
- PCM入力(バッファリングあり)
- FFT (一度に 1024 サンプル、その後バッファの先頭から 200 サンプルを削除)
- 再割り当て方法 (200 サンプル前の前の FFT に対して)
- ピークのフィルタリング (この部分は、はるかに適切に行うことも、除外することもできます)
- ピークを組み合わせてハーモニクスのセットにする (組み合わせをトーンと呼びます)
- トーンの一時的なフィルタリング (単に新しく検出されたトーンを使用するのではなく、以前に検出されたトーンのセットを更新します)
- 最良のボーカル トーンを選択します (周波数制限、重み付け、ハーモニック アレイも使用できますが、使用しないと思います)。
しかし、誰かがこれがどのように機能するかを理解するのを手伝ってくれますか? FFT から Reassignment メソッドに送られるのは何ですか?