I created a DJ-ing application that allows you to mix your MP3s with a real turntable. So I generated an audio timecode to burn on a CD, left channel is the absolute position, right channel is a synchronization sine which frequency is 2205 Hz. Left channel is same frequency except that it represents binary sequences.

Precision is an absolute pre-requisite, the pitch on my Pioneer CDJ-1000 has a precision of 0.02% which is good enough to properly beatmatch songs. I have no problem on getting the absolute position but with the right channel. After some searching, I found the Zero Crossing Rate algorithm to try detect the pitch. When I process data in real-time however, the pitch moves constantly.

After some searching I found out that as samples are discrete values, so not continuous if I'm right, there's not enough precision with a sample rate of 44100 Hz. Period of 20 samples is 2205 Hz, period of 21 samples is 2100 Hz; so the problem needs something more high-level.

I found then harmonic average, and moving average, results are somewhat more stable. FFT is the best but costs a lot of CPU, using a size of 65536 and time to compute it, whereas with the zero-crossing rate, I can update the value very frequently. The latest candidate, I still need to test is the Standard Deviation.

There must be some math formula that helps for that particular problem, but as I know not much about maths, I am somewhat lost.

Do you have any ideas ?

Thanks a lot :-)))