小编Dom*_*Ong的帖子

比较两个频谱图以找到它们匹配算法的偏移量

我每天录制2分钟的互联网广播。总是有相同的开始和结束叮当声。由于广播的确切时间可能会有所不同,大约需要6分钟,因此我必须录制大约15分钟的广播。

我希望确定15分钟录音中这些杂音的确切时间,以便提取所需的音频部分。

我已经启动了一个C#应用程序,在该应用程序中,我基于http://www.codeproject.com/KB/audio-video/SoundCatcher.aspx将MP3解码为PCM数据并将PCM数据转换为频谱图

我尝试在PCM数据上使用互相关算法,但是该算法在6分钟左右的过程中非常慢,步长为10ms,并且在某些情况下无法找到叮当声的开始时间。

对两个频谱图进行匹配比较的算法有什么想法吗?还是找到铃声开始时间的更好方法?

谢谢,

更新,抱歉造成延迟

首先,感谢所有的答案,其中大多数都是无关紧要的想法。

我尝试实现fonzo提出的Shazam算法。但是未能检测到光谱图中的峰。这是来自三个不同记录的起始铃声的三个频谱图。我尝试使用带有斑点过滤器的AForge.NET(但未能识别峰值),模糊图像并检查高度差,拉普拉斯卷积,斜率分析以检测一系列竖线(但错误太多)正)...

同时,我尝试了Dave Aaron Smith提出的Hough算法。我在哪里计算每列的RMS。是是每一列都是O(N * M),但是M << N(注意,一列大约是8k的样本)。因此,总的来说还算不错,该算法大约需要3分钟,但绝不会失败。

我可以采用该解决方案,但如果可能的话,我希望使用Shazam,因为它的O(N)可能更快(并且也更凉爽)。大家都想出一种算法,可以始终检测那些频谱图中的相同点(不必是峰值),这要感谢添加注释。

FFT开始叮当1

FFT开始丁当2

FFT开始丁当3

新更新

最后,我继续使用上面解释的算法,尝试实现Shazam算法,但未能在频谱图中找到合适的峰值,即从一个声音文件到另一个声音文件的不恒定点。从理论上讲,Shazam算法是解决此类问题的方法。Dave Aaron Smith提出的Hough算法更稳定,更有效。我拆分了大约400个文件,其中只有20个未能正确拆分。从8GB到1GB的磁盘空间。

谢谢你的帮助。

c# algorithm audio comparison spectrogram

5
推荐指数
1
解决办法
5704
查看次数

标签 统计

algorithm ×1

audio ×1

c# ×1

comparison ×1

spectrogram ×1