Auto-correlation is a very good start. I've written a brief blog post with an illustration comparing auto-correlation to a simple Fourier transform of the same data.
If the input signal is periodic, the Fourier transform will have a peak at the corresponding frequency. However, as I describe in the post linked above, it is not a very accurate estimate of that frequency. Auto-correlation gives you a better estimate.
A third method that I've heard about but haven't tried yet is to use overlapping windows. I think the basic algorithm is this:
1) Do a Fourier transform of the input, find the strongest peak (absolute value).
2) Shift the window forward by exactly one wavelength of that strongest peak
3) Compare the phase (i.e. angle of the complex number) for that frequency in the two Fourier transforms.
4) Compute a better estimate of wavelenth/phase.
I think it would be something like this:
$p_0, p_1 $ : Phase of the two frequency components in Radians
$l$ : Wavelength of the selected frequency component
$l_{est}$ : Estimate of the wavelength of the true frequency
$l_{est} = l * (1+\frac{(p_1 - p_0)}{2\pi}) $
If you shift the window by one wavelength, and it exactly matches the underlying wavelength, then $p_0 = p_1$, and $l$ is a good estimate of the true wavelength. This happens when the window size is a multiple of the fundamental wavelength. If the fundamental wavelength is slightly less than that, when you shift the window, the phase of the signal will be greater. The fundamental is shorter than distinace you've shifted the window, so the phase is greater than it was before, so $p_1 > p_0$
Note: It's important that you shift the window in the original sample. If you just rotate the buffer (bringing in the first few samples and putting them at the end), then your fourier transform will be identical and the phase will be shifted by exactly the amount you've rotated the buffer.