私は最近、入力されたマイク データに対してリアルタイムのスライディング FFT 分析を実行する必要があるプロジェクトを取り上げました。これを行うために選んだ環境は、OpenGL と Cinder で、C++ を使用しています。
オーディオ プログラミングは初めての経験で、少し混乱しています。
これは、OpenGL アプリケーションで達成しようとしているものです。
したがって、すべてのフレームには、受信データの一部があります。for ループ (したがって複数のパス) では、現在のデータのウィンドウが消費され、FFT 分析が実行されます。forループの次の反復では、ウィンドウはデータの最後に到達するまで、データなどを通じて「ホップサイズ」を進めます。
現在、このプロセスは連続している必要があります。しかし、上の図でわかるように、現在のアプリ フレームが終了し、次のフレームのデータが入ってくるとすぐに、前のフレームを離れた場所を取得できません (データが既になくなっているため)。青い領域が 2 つのフレームの間にある図で確認できます。
今、あなたは言うかもしれませんが、これが決して起こらないようにウィンドウサイズ/ホップサイズを選んでください。
C++11 向けのこの種の処理に関する提案も大歓迎です!
ありがとう!