void InitializePainer(WaveformPainter waveformPainter, float[] samples)
        {
            waveformPainter.ClearSamples();
            int step = samples.Length / waveformPainter.MaxSamples;
            int cnt  = 0;

            for (var i = 0; i < waveformPainter.MaxSamples; i++)
            {
                var avgs   = new List <float>();
                var avgNeg = new List <float>();
                var avgPos = new List <float>();
                for (var j = 0; j < step; j++, cnt++)
                {
                    if (cnt >= samples.Length)
                    {
                        break;
                    }

                    if (samples[cnt] > 0)
                    {
                        avgPos.Add(samples[cnt]);
                        avgNeg.Add(0);
                    }
                    if (samples[cnt] <= 0)
                    {
                        avgNeg.Add(samples[cnt]);
                        avgPos.Add(0);
                    }
                    avgs.Add(samples[cnt]);
                }

                if (avgPos.Count > 0)
                {
                    waveformPainter.PositiveSamples[i] = (avgPos.Max());
                }
                if (avgNeg.Count > 0)
                {
                    waveformPainter.NegativeSamples[i] = (avgNeg.Min());
                }
                if (avgs.Count > 0)
                {
                    waveformPainter.AverageSamples.Add(avgs.Average());
                }
            }

            waveformPainter.Invalidate();
        }