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