private unsafe void process() { if (_fftStream.Length >= fftBins) { int samplesRead = _fftStream.Read(fftBufferPtr, fftBins); // http://www.designnews.com/author.asp?section_id=1419&doc_id=236273&piddl_msgid=522392 float fftGain = (float)(10.0 * Math.Log10(fftBins / 2.0)); float offset = 24.0f - fftGain + _fftOffset; decimator.Process(fftBufferPtr, samplesRead); if (checkBox1.Checked) { fixed(float *w = hammingWindow) { FFT.ApplyWindow(fftBufferPtr, w, samplesRead); } } sFFT.updateData(fftBufferPtr, samplesRead); sFFT.execute(); sFFT.copyOutput(fftBufferPtr, samplesRead); lock (powerBuffer) { FFT.SpectrumPower(fftBufferPtr, powerPtr, samplesRead, offset); } } }