使用 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 检测两个音频文件中多次点击声音之间的延迟的主要内容,如果未能解决你的问题,请参考以下文章