Ejemplo n.º 1
0
        private void CreateSpectrumLineInternal(Graphics graphics, Pen pen, float[] fftBuffer, Size size)
        {
            int height = size.Height;

            SpectrumPointData[] spectrumPoints = CalculateSpectrumPoints(height, fftBuffer);

            for (int i = 0; i < spectrumPoints.Length; i++)
            {
                SpectrumPointData p = spectrumPoints[i];
                int    barIndex     = p.SpectrumPointIndex;
                double xCoord       = (_barWidth * barIndex) + (BarSpacing * barIndex) + 1 + _barWidth / 2;

                var p1 = new PointF((float)xCoord, height);
                var p2 = new PointF((float)xCoord, height - (float)p.Value - 1);

                graphics.DrawLine(pen, p1, p2);
            }
        }
        public double[] GetPointData(double multiplier)
        {
            float[] fftBuffer = new float[(int)FftSize];

            SpectrumProvider.GetFftData(fftBuffer, this);

            SpectrumPointData[] spectrumPoints = CalculateSpectrumPoints(multiplier, fftBuffer);

            double[] values = new double[spectrumPoints.Length];

            for (int i = 0; i < spectrumPoints.Length; i++)
            {
                SpectrumPointData p = spectrumPoints[i];
                values[i] = p.Value;
            }

            return(values);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Calculate the colors
        /// </summary>
        protected override bool GetColors(Graphics graphics, float lineThickness)
        {
            if (!m_IsInitialized)
            {
                UpdateFrequencyMapping();
                m_IsInitialized = true;
            }

            var fftBuffer = new float[(int)Analyzer.FFTSize];

            //get the fft result from the spectrumprovider
            if (SpectrumProvider.GetFftData(fftBuffer, this))
            {
                //prepare the fft result for rendering
                SpectrumPointData[] spectrumPoints = CalculateSpectrumPoints(1.0, fftBuffer);
                using (var pen = new System.Drawing.Pen(ColorPalette.PanelBG_Drawing, lineThickness))
                {
                    float currentYOffset = m_Bitmap.Size.Height;

                    //render the fft result
                    for (int i = 0; i < spectrumPoints.Length; i++)
                    {
                        SpectrumPointData p = spectrumPoints[i];

                        float xCoord      = m_Position;
                        float pointHeight = (float)m_Bitmap.Size.Height / (float)spectrumPoints.Length;

                        //get the color based on the fft band value
                        double value = p.Value * m_Multiplier;

                        pen.Color = Utils.Lerp(ColorPalette.PanelBG, ColorPalette.Accent, value);

                        var p1 = new PointF(xCoord, currentYOffset);
                        var p2 = new PointF(xCoord, currentYOffset - pointHeight);

                        graphics.DrawLine(pen, p1, p2);

                        currentYOffset -= pointHeight;
                    }
                }
                return(true);
            }
            return(false);
        }
Ejemplo n.º 4
0
        public bool CreateVoicePrint3D(Graphics graphics, RectangleF clipRectangle, float xPos, Color background,
                                       float lineThickness = 1f)
        {
            if (!_isInitialized)
            {
                UpdateFrequencyMapping();
                _isInitialized = true;
            }

            var fftBuffer = new float[(int)FftSize];

            //get the fft result from the spectrumprovider
            if (SpectrumProvider.GetFftData(fftBuffer, this))
            {
                //prepare the fft result for rendering
                SpectrumPointData[] spectrumPoints = CalculateSpectrumPoints(1.0, fftBuffer);
                using (var pen = new Pen(background, lineThickness))
                {
                    float currentYOffset = clipRectangle.Y + clipRectangle.Height;

                    //render the fft result
                    for (int i = 0; i < spectrumPoints.Length; i++)
                    {
                        SpectrumPointData p = spectrumPoints[i];

                        float xCoord      = clipRectangle.X + xPos;
                        float pointHeight = clipRectangle.Height / spectrumPoints.Length;

                        //get the color based on the fft band value
                        pen.Color = _colorCalculator.GetColor((float)p.Value);

                        var p1 = new PointF(xCoord, currentYOffset);
                        var p2 = new PointF(xCoord, currentYOffset - pointHeight);

                        graphics.DrawLine(pen, p1, p2);

                        currentYOffset -= pointHeight;
                    }
                }
                return(true);
            }
            return(false);
        }
Ejemplo n.º 5
0
        private void CreateSpectrumLineInternal(Graphics graphics, Pen pen, float[] fftBuffer, Size size)
        {
            int height = size.Height;

            //prepare the fft result for rendering
            SpectrumPointData[] spectrumPoints = CalculateSpectrumPoints(height, fftBuffer);
            //connect the calculated points with lines
            for (int i = 0; i < spectrumPoints.Length; i++)
            {
                SpectrumPointData p = spectrumPoints[i];
                int    barIndex     = p.SpectrumPointIndex;
                double xCoord       = BarSpacing * (barIndex + 1) + (_barWidth * barIndex) + _barWidth / 2;

                var p1 = new PointF((float)xCoord, height);
                var p2 = new PointF((float)xCoord, height - (float)p.Value - 1);

                graphics.DrawLine(pen, p1, p2);
            }
        }
Ejemplo n.º 6
0
        public void CreateSpectrumLineInternal(float[] fftBuffer, int height)
        {
            SpectrumPointData[] spectrumPoints = CalculateSpectrumPoints(height, fftBuffer);

            for (int i = 0; i < spectrumPoints.Length; i++)
            {
                SpectrumPointData p = spectrumPoints[i];
                int barIndex        = p.SpectrumPointIndex;

                var p1 = height;
                var p2 = height - (float)p.Value - 1;
                for (float f = 0; f < p.Value; f++)
                {
                    Console.Write("*");
                }
                Console.WriteLine();
            }
            Console.WriteLine();
        }
Ejemplo n.º 7
0
        private void CreateSpectrumLineInternal(Graphics graphics, Pen pen, float[] fftBuffer, Size size)
        {
            int height = size.Height;

            //prepare the fft result for rendering
            SpectrumPointData[] spectrumPoints = CalculateSpectrumPoints(height, fftBuffer);

            if (spectrumPoints != null && spectrumPoints.Length > 0)
            {
                FirstPointValue = spectrumPoints[0].Value;
                LastPointValue  = spectrumPoints[spectrumPoints.Length - 1].Value;
                Average         = spectrumPoints.Average(s => s.Value);
                Max             = spectrumPoints.Max(s => s.Value);

                MaxPercent = 1 - ((height - Max) / height);
                if (Sensitivity > 0 && MaxPercent + Sensitivity <= 1)
                {
                    MaxPercent = MaxPercent + Sensitivity;
                }

                MaxIndex = spectrumPoints.ToList().IndexOf(spectrumPoints.First(s => s.Value == Max));
            }

            Console.WriteLine("First: {0}, Last: {1}, Average: {2}, Max: {3}, MaxPercent: {4}", FirstPointValue, LastPointValue, Average, Max, MaxPercent);

            //connect the calculated points with lines
            for (int i = 0; i < spectrumPoints.Length; i++)
            {
                SpectrumPointData p = spectrumPoints[i];
                int    barIndex     = p.SpectrumPointIndex;
                double xCoord       = BarSpacing * (barIndex + 1) + (_barWidth * barIndex) + _barWidth / 2;

                var p1 = new PointF((float)xCoord, height);
                var p2 = new PointF((float)xCoord, height - (float)p.Value - 1);

                Console.WriteLine("Height: {0}, PValue:{1}, Calc: {2}", height, p.Value, height - (float)p.Value - 1);

                graphics.DrawLine(pen, p1, p2);
            }
        }
Ejemplo n.º 8
0
        public bool CreateVoicePrint3D(Graphics graphics, RectangleF clipRectangle, float xPos, Color background, DrawPurpose dp,
                                       float lineThickness = 1f)
        {
            if (!_isInitialized)
            {
                UpdateFrequencyMapping();
                _isInitialized = true;
            }

            var fftBuffer = new float[(int)FftSize];

            //get the fft result from the spectrumprovider
            if (SpectrumProvider.GetFftData(fftBuffer, this))
            {
                SpectrumPointData[] spectrumPoints;
                //prepare the fft result for rendering
                switch (dp)
                {
                case DrawPurpose.ForAnalog:
                    spectrumPoints = CalculateSpectrumPoints(0.99, fftBuffer);
                    break;

                case DrawPurpose.ForDigitalBass:
                    spectrumPoints = CalculateSpectrumPoints(0.99, fftBuffer, bassFactor, BassFactorSqrt);
                    break;

                case DrawPurpose.ForDigitalMedio:
                    spectrumPoints = CalculateSpectrumPoints(0.99, fftBuffer, medioFactor, MedioFactorSqrt);
                    break;

                case DrawPurpose.ForDigitalTreble:
                    spectrumPoints = CalculateSpectrumPoints(0.99, fftBuffer, trebleFactor, trebleFactorSqrt);
                    break;

                case DrawPurpose.ForGeneric:
                    spectrumPoints = CalculateSpectrumPoints(0.99, fftBuffer);
                    break;

                default:
                    spectrumPoints = CalculateSpectrumPoints(0.99, fftBuffer);
                    break;
                }


                using (var pen = new Pen(background, lineThickness))
                {
                    float currentYOffset = clipRectangle.Y + clipRectangle.Height;

                    //render the fft result
                    for (int i = 0; i < spectrumPoints.Length; i++)
                    {
                        SpectrumPointData p = spectrumPoints[i];

                        float xCoord      = clipRectangle.X + xPos;
                        float pointHeight = clipRectangle.Height / spectrumPoints.Length;

                        //get the color based on the fft band value
                        pen.Color = _colorCalculator.GetColor((float)p.Value);

                        switch (dp)
                        {
                        case DrawPurpose.ForAnalog:
                            FirmataModule.SoundSpectrumColor = pen.Color;
                            break;

                        case DrawPurpose.ForDigitalBass:
                            FirmataModule.DigitalSpectrumPattern[0] = pen.Color;
                            break;

                        case DrawPurpose.ForDigitalMedio:
                            FirmataModule.DigitalSpectrumPattern[1] = pen.Color;
                            break;

                        case DrawPurpose.ForDigitalTreble:
                            FirmataModule.DigitalSpectrumPattern[2] = pen.Color;
                            break;

                        case DrawPurpose.ForGeneric:
                            break;

                        default:
                            break;
                        }


                        var p1 = new PointF(xCoord, currentYOffset);
                        var p2 = new PointF(xCoord, currentYOffset - pointHeight);

                        graphics.DrawLine(pen, p1, p2);

                        currentYOffset -= pointHeight;
                    }
                }
                return(true);
            }
            return(false);
        }