Example #1
0
        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);
            }
        }