如何检查一个音频是不是出现在另一个?

Posted

技术标签:

【中文标题】如何检查一个音频是不是出现在另一个?【英文标题】:How to check whether an audio appears in another?如何检查一个音频是否出现在另一个? 【发布时间】:2013-11-05 15:28:34 【问题描述】:

例如,我有 2 个音频,一个是 A,另一个是 B。我想检查 B 是否出现在 A 中(如果 A 的一部分在某个阈值内与 B 相似),出现的次数和次数是多少? B出现的确切时间。 有什么算法吗?还是有些例子已经做过类似的事情了?

提前致谢。

【问题讨论】:

【参考方案1】:

一般来说,您需要在两个音频波形之间执行cross correlation。如果相关波形峰值高于某个阈值,则您已找到匹配对。这可以通过使用基于fast Fourier transforms 的技术在 O(n log(n)) 时间内实现,

特别是对于音乐内容,您可以使用acoustic fingerprinting 技术来加快速度。***文章列出了几个开源解决方案。

【讨论】:

实际上,在我的示例中,A 是来自广播的音频,B 是广告音频。我想要的是计算 B 在 A 中出现的次数。我不知道声学指纹技术(例如 Echoprint)是否有效。 它们应该有助于减少计算工作量。如果您正在监控广播电台,您将拥有高质量的音频样本可供使用,这也将有所帮助。这里有一篇关于音频搜索算法的有趣论文:ee.columbia.edu/~dpwe/papers/Wang03-shazam.pdf 除非这是在非常受控的条件下运行(例如:同步源,信号路径中没有有损压缩),否则这将不可靠。此外,在信号 A 中搜索 M 个音频片段的可能应用,在这种情况下,计算负载与 M 成比例。这就是为什么特征提取技术可能是这里的方法。 特征提取技术在这里意味着什么?诸如声学指纹之类的东西? 我上面链接的论文描述了一种非常有效的基于星座图的特征提取方法。但是,它已获得专利,因此未经许可您将无法在商业上使用它。但是,除非您想进行大规模的操作(例如同时检查数百个站点以获取数千个不同的广告),否则更简单且效率较低的特征提取方法可能会很好用。

以上是关于如何检查一个音频是不是出现在另一个?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查玩家是不是已经在另一个桌子/房间? - 卢阿

如何检查一个文件的值是不是包含在另一个文本文件中? (perl 脚本)

如何使用 PHP 检查一个单词是不是包含在另一个字符串中?

量角器 - 如何检查对象是不是包含在另一个对象中?

如何检查音频设备是不是为聚合设备

MYSQL/PHP/Postgis:检查一个坐标是不是在另一个坐标的半径内(小扭曲)