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

Posted

技术标签:

【中文标题】使用 Matlab 检测两个音频文件中多次点击声音之间的延迟【英文标题】:Detect the delay between multiple click sounds in two audio files using Matlab 【发布时间】:2017-01-28 18:04:23 【问题描述】:

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

我可以检测到两个音轨中第一次点击之间的延迟。

我知道两种不同的方法:

1.

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

2.

delay = finddelay(Track1, Track2);

这两种方法都返回相同的值,但现在可以使用倒号。

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

这是另一张图片,从两个轨道开始点击:

我怎样才能做到这一点?

PS:如果corresponding这个词用错了,请见谅。我的意思是相应秒的点击次数。

【问题讨论】:

【参考方案1】:

我自己想出了一个简单的功能。基于声音间隔大约一秒的事实,我遍历 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

【讨论】:

以上是关于使用 Matlab 检测两个音频文件中多次点击声音之间的延迟的主要内容,如果未能解决你的问题,请参考以下文章

从 MATLAB 中的波形音频文件中去除噪声

Android录制声音文件(音频),并播放

我有一段录音,里面有杂音,并且声音太底,有人能帮我去除吗,

如何把matlab里的音频文件转换为wav格式

阻止音频文件重复 XNA

求一段运用matlab把俩个声音文件混合成一个文件的程序!我只会编写一小段声音读取和播放的程序。混合就不会