soundがcaptureできれば...FFT部分を変えるには

1. FPSを測る(frames per second)

 

芳しくありません...

FFTpoint    FPS

    2048        43

    4096        24

    8192        12

FFT point が少ない時は、速いです、Direct3Dのお陰か ?

しかし、8192pointを上回ると、....

FFTpoint    FPS

    16384        6   

    32768        3

    65536        2

あんぎゃー、あかんがな....リアルタイム性能は、要らんとは、言え。

これは、完全に、FFTによる、性能の差です、プログラムの、他の所は、同じなのですから...

FFTpoint数が少ない時は、もうちょっと、ゆっくりでもよいが、多い時の、速度の落ち込みを、抑えたい....

butterfly演算も、まだ理解できない、ヒヨッコの私には、色々なFFTを試してみるしか、ありませんね。

んで、色々なFFTを試す、その方法です。

2. 色々なFFTを試すには

 web上に発表されているFFTプログラムの内、私が、使えそうなのは、C言語によるものです。

つまり、C言語と、managed C#を、橋渡しする部分が必要です。

よい、方法が、あります。

Visual Studio ExpressEditionは、C++も、フリーで使わせていただけるのですから、これを使います。

C++のチュートリアルの中に、「マネージアセンブリの作成と使用」が、あります。

このチュートリアルの通りに、行うのです。

そして、ここに、webで公開されているプログラムを、打ち込むのです。

例えば、大浦様のプログラムとか、FFTWとか...

これで、C#の参照に追加できる、dllが、出来上がります。

んで、C#のプログラム中で、このdllを、参照に追加するのです。

そうしますと、C#プログラムの中で、即、使う事ができるのです!

FFT_FUNCS.MyFFTFuncs.rfft(numberOfSpectrum,p)の所です。

FFT_FUNCSが、C++で作ったnamespace名で、MyFFTFuncsが、クラス名です。

C++の関数rfft()で、ポインターを使いますので、

C#でポインターを使う為に unsafe キーワードを使い、

更に、fixed キーワードを使い、ポインターのアドレスが、変わらないように、します。

ポインターは、C#上で

    double* p = result

なんて、宣言すると、C#に、怒られます。result[]のresultは、アドレスではない、みたいなので。

 そんで、已む無く、配列の先頭のアドレスを、ポインターに渡します。

     double* p = &result[0]

これで、C++で作った関数を、C#から、使うことが、できます。

Visual Studio ExpressEdition、大いに楽しませていただいて、おります。

Microsoft社様に、再度御礼申し上げます。

H.18.8.29