public void AnalyzeValues() { if (WaveFileReader.Samples.Count == 0) { return; } var audioBatches = SplitIntoChunks(WaveFileReader.Samples, FftLength); foreach (var batch in audioBatches) { var samples = (List <float>)batch; if (samples.Count < FftLength) { continue; } LastFftSamples = new Complex[FftLength]; foreach (var sample in samples) { var i = samples.IndexOf(sample); LastFftSamples[i].X = (float)(sample * FastFourierTransform.HammingWindow(i, FftLength)); LastFftSamples[i].Y = 0; } FastFourierTransform.FFT(true, (int)Math.Log(FftLength, 2.0), LastFftSamples); var specDataColumn = new List <double>(); foreach (var sampleAfterFFT in LastFftSamples) { var magnitude = 2 * Math.Sqrt(sampleAfterFFT.X * sampleAfterFFT.X + sampleAfterFFT.Y * sampleAfterFFT.Y) / FftLength; var amplitudeInDb = 10 * Math.Log10(magnitude); specDataColumn.Add(amplitudeInDb); } specDataColumn.Reverse(); SpecData.Add(specDataColumn); } }