static double[] autocorrelationTableForAudioSamples(short[] samples) { ret autocorrelationTableForAudioSamples(samples, 0, l(samples)); } static double[] autocorrelationTableForAudioSamples(short[] samples, int start, int end) { int n = end-start; double[] table = new[n]; // hmm. value at zero seems pointless for j to n: { double correlation = 0; for i to n: correlation += sixteenBitAudioSampleToDouble(samples[start+i]) * sixteenBitAudioSampleToDouble(samples[start+mod(i - j, n)]); table[j] = correlation; } ret table; } static double[] autocorrelationTableForAudioSamples(short[] samples, IntRange r) { ret autocorrelationTableForAudioSamples(samples, r.start, r.end); }