Пример #1
0
        private void FftCalculated(object sender, FftEventArgs e)
        {
            if (_lines == 0)
            {
                return;
            }

            lock (SpectrumData)
            {
                int x;
                var b0 = 0;

                SpectrumData.Clear();
                for (x = 0; x < _lines; x++)
                {
                    float peak = 0;
                    var   b1   = (int)Math.Pow(2, x * 10.0 / (_lines - 1));
                    if (b1 > 2047)
                    {
                        b1 = 2047;
                    }
                    if (b1 <= b0)
                    {
                        b1 = b0 + 1;
                    }
                    for (; b0 < b1; b0++)
                    {
                        if (peak < e.Result[1 + b0].X)
                        {
                            peak = e.Result[1 + b0].X;
                        }
                    }
                    var y = (int)(Math.Sqrt(peak) * 3 * 255 - 4);
                    if (y > 255)
                    {
                        y = 255;
                    }
                    if (y < 0)
                    {
                        y = 0;
                    }
                    SpectrumData.Add((byte)y);
                }
            }
        }