[ACCEPTED]-Time delay estimation between two audio signals-timedelay
The technique you're looking for is called 11 cross correlation. It's a very simple, if somewhat compute 10 intensive technique which can be used for 9 solving various problems, including measuring 8 the time difference (aka lag) between two similar 7 signals (the signals do not need to be identical).
If 6 you have a reasonable idea of your lag value 5 (or at least the range of lag values that 4 are expected) then you can reduce the total 3 amount of computation considerably. Ditto 2 if you can put a definite limit on how much 1 accuracy you need.
A very straight forward thing todo is just 6 to check if the peaks exceed some threshold, the 5 time between high-peak on line A and high-peak 4 on line B is probably your delay. Just try 3 tinkering a bit with the thresholds and 2 if the graphs are usually as clear as the 1 picture you posted, then you should be fine.
Having had the same problem and without 4 success to find a tool to sync the start 3 of video/audio recordings automatically, I 2 decided to make syncstart (github).
It is a command line 1 tool. The basic code behind it is this:
import numpy as np from scipy import fft from scipy.io import wavfile r1,s1 = wavfile.read(in1) r2,s2 = wavfile.read(in2) assert r1==r2, "syncstart normalizes using ffmpeg" fs = r1 ls1 = len(s1) ls2 = len(s2) padsize = ls1+ls2+1 padsize = 2**(int(np.log(padsize)/np.log(2))+1) s1pad = np.zeros(padsize) s1pad[:ls1] = s1 s2pad = np.zeros(padsize) s2pad[:ls2] = s2 corr = fft.ifft(fft.fft(s1pad)*np.conj(fft.fft(s2pad))) ca = np.absolute(corr) xmax = np.argmax(ca) if xmax > padsize // 2: file,offset = in2,(padsize-xmax)/fs else: file,offset = in1,xmax/fs
More Related questions