使用Matlab检测两个音频文件中多次单击声音之间的延迟

时间:2017-01-28 18:04:24

标签: matlab math audio signal-processing

我有两个音轨,大约每秒都有一个咔哒声(基本上是短正弦)。采样率为44.1kHz。一次点击大约需要1000个样本。每首曲目大约有20到30次点击。相应的点击应该有几个样本的错误(最多48个样本)。

enter image description here

我可以检测到两首曲目中第一次点击之间的延迟。

我知道两种不同的方法:

1

[c, lags] = xcorr(Track1, Track2);
[max_c, I] = max(c);
delay = lags(I);

2

delay = finddelay(Track1, Track2);

两种方法都使用反转符号返回相同的值,现在可以。

我想检测所有相应点击声音之间的延迟。

这是从两个曲目开始点击的另一张图片:

enter image description here

我怎样才能做到这一点?

PS:抱歉,如果使用错误的corresponding这个词。我的意思是相应秒的点击次数。

1 个答案:

答案 0 :(得分:0)

我自己想出了一个简单的功能。基于声音间隔大约一秒的事实,我迭代PCM数据并以采样率递增计数器。

function result = delays(filename)
    [pcm, samplerate] = audioread(filename);
    t1 = pcm(:,1);
    t2 = pcm(:,2);
    len = length(t1);
    cnt = 1;
    result = [];
    while cnt < len
        delay = finddelay(t1(cnt:end), t2(cnt:end));
        result = [result delay];
        cnt = cnt + samplerate;
    end
end