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(); }