private void SetDataFFT(WaveInEventArgs args)
        {
            int bytesPerSample  = _wi.WaveFormat.BitsPerSample / 8;
            int samplesRecorded = args.BytesRecorded / bytesPerSample;

            Int16[] dataPcm = new Int16[samplesRecorded];
            for (int i = 0; i < samplesRecorded; i++)
            {
                dataPcm[i] = BitConverter.ToInt16(args.Buffer, i * bytesPerSample);
            }

            // the PCM size to be analyzed with FFT must be a power of 2
            int fftPoints = 2;

            while (fftPoints * 2 <= dataPcm.Length)
            {
                fftPoints *= 2;
            }

            // apply a Hamming window function as we load the FFT array then calculate the FFT
            NAudio.Dsp.Complex[] fftFull = new NAudio.Dsp.Complex[fftPoints];
            for (int i = 0; i < fftPoints; i++)
            {
                fftFull[i].X = (float)(dataPcm[i] * NAudio.Dsp.FastFourierTransform.HammingWindow(i, fftPoints));
            }
            NAudio.Dsp.FastFourierTransform.FFT(true, (int)Math.Log(fftPoints, 2.0), fftFull);

            double[] dataFft = new double[fftPoints / 2];
            byte[]   data    = new byte[fftPoints / 2];

            for (int i = 0; i < fftPoints / 2; i++)
            {
                double fftLeft  = Math.Abs(fftFull[i].X + fftFull[i].Y);
                double fftRight = Math.Abs(fftFull[fftPoints - i - 1].X + fftFull[fftPoints - i - 1].Y);
                dataFft[i] = fftLeft + fftRight;
                data[i]    = (byte)(fftLeft + fftRight);
            }

            /*if(SpectrumVisualizer.GetType().Name == "CircleSpectrumVisualizer")
             *  SpectrumVisualizer.Set(GetNiceCircleFFT(data));
             * else
             *  SpectrumVisualizer.Set(data);*/

            SpectrumVisualizer.Set(GetNiceFftData(data, SpectrumVisualizer.GetType().Name == "CircleSpectrumVisualizer"));
        }
        private void SetDataAmplitude(WaveInEventArgs args)
        {
            int bytesPerSample  = _wi.WaveFormat.BitsPerSample / 8;
            int samplesRecorded = args.BytesRecorded / bytesPerSample;

            Int16[] lastBuffer = new Int16[samplesRecorded];
            for (int i = 0; i < samplesRecorded; i++)
            {
                lastBuffer[i] = BitConverter.ToInt16(args.Buffer, i * bytesPerSample);
            }
            int    lastBufferAmplitude = lastBuffer.Max() - lastBuffer.Min();
            double amplitude           = (double)lastBufferAmplitude / Math.Pow(2, _wi.WaveFormat.BitsPerSample);

            if (amplitude > peakAmplitudeSeen)
            {
                peakAmplitudeSeen = amplitude;
            }
            amplitude = amplitude / peakAmplitudeSeen * 100;

            //_spectrumdata.Clear();
            if (_spectrumdata.Count >= NumberOfLines)
            {
                _spectrumdata.RemoveAt(0);
            }

            double regleDe3 = amplitude * 255 / 100;
            int    y        = Convert.ToInt32(regleDe3);

            if (y > 255)
            {
                y = 255;
            }
            if (y < 0)
            {
                y = 0;
            }
            _spectrumdata.Add((byte)y);



            SpectrumVisualizer.Set(_spectrumdata.ToArray());
        }