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