public List <int> Autocorrelation()
        {
            // dzielimy dane na kawa³ki wg chunkSize
            int[][] parts = SoundUtil.ChunkArray(data, chunkSize);
            autoCorrelations = new List <long[]>();
            List <int> frequencies = new List <int>();

            // analizujemy chunki
            foreach (int[] part in parts)
            {
                // bufor na wyliczenia wartoœci autokorelacji
                long[] autocorrelation = new long[part.Length];

                // liczymy wartoœci autokorelacji
                for (int m = 1; m < autocorrelation.Length; m++)
                {
                    long sum = 0;
                    for (int n = 0; n < autocorrelation.Length - m; n++)
                    {
                        sum += part[n] * part[n + m];
                    }
                    autocorrelation[m - 1] = sum;
                }

                // szukamy lokalnego maksimum
                long localMaxIndex = FindLocalMax(autocorrelation);

                // czêstotliwoœæ podstawow¹ wyliczamy jako iloraz czêstotliwoœci próbkowania
                // i indeksu lokalnego maksimum
                int frequency = (int)(sampleRate / localMaxIndex);
                autoCorrelations.Add(autocorrelation);
                frequencies.Add(frequency);
            }

            return(frequencies);
        }