public static double[] GetNormalizedLevels(OctaveBands octaveBands)
        {
            var result = new double[octaveBands.Count];

            for (int i = 0; i < octaveBands.Count; i++)
            {
                result[i] = octaveBands[i].NormalizedLevel;
            }

            return(result);
        }
        public static OctaveBands GetOctaveBandsData(Dictionary <double, double> data,
                                                     double startFreq,
                                                     double[] highFreqs,
                                                     double[] rootFreqs,
                                                     double normalizeConst)
        {
            var result = new OctaveBands(highFreqs.Length);

            double currentStartFreq = startFreq;
            var    sumOfSumLevels   = 0.0;

            for (int i = 0; i < highFreqs.Length; i++)
            {
                var octaveBand = new OctaveBand();
                var highFreq   = highFreqs[i];
                octaveBand.LowFreq  = currentStartFreq;
                octaveBand.HighFreq = highFreqs[i];
                octaveBand.RootFreq = rootFreqs[i];

                var levels = data.Where(x => x.Key > currentStartFreq && x.Key < highFreq).Select(x => x.Value);

                octaveBand.SumLevel      = GetSumLevel(levels);
                sumOfSumLevels          += octaveBand.SumLevel;
                octaveBand.IntegralLevel = GetIntegralLevel(octaveBand.SumLevel);

                currentStartFreq = highFreq;

                result[i] = octaveBand;
            }

            foreach (var band in result.Bands)
            {
                band.NormalizedLevel = GetNormalizedLevel(band.IntegralLevel, sumOfSumLevels, normalizeConst);
            }

            return(result);
        }