比较两个小音频文件(例如,拍手) Android

信息处理 fft 相关性 音频处理
2022-02-01 00:57:04

亲爱的,我是信号处理的新手,我正在处理一个 Android 应用程序,它应该实时进行一些音频文件(具有相同的“小”持续时间)比较。我的主要重点是比较两个小音频文件(每个大约 10 秒),例如与拍手有关(或与球落等短事件有关的其他声音)。换句话说,我应该保存一个参考音频文件(或您可能建议的重要表示),然后(实时)将新录制的音频文件与已保存的音频文件进行比较。例如,如果我的参考音频是拍手,那么如果第二个音频包含拍手,即使有一些噪音或 2 个声音强度不同,我也决定这 2 个音频是相似的。

我已经检查了 musicg lib 进行这种比较,但是,我必须将录制的音频文件转换为 .wav,这可能会在我的实时应用程序中增加一些速度。我想知道是否有另一种适合具有相同持续时间的更好的小音频文件(约 10 秒)的替代方案?

提前感谢您的建议和帮助。

2个回答

拍手的强度非常高,因此我相信您可以使用强度阈值检测时间位置。出于比较目的,您可以直接比较 FFT,例如使用均方误差或其他指标。

您感兴趣的内容听起来像是匹配过滤器的通用版本。我将无法谈论如何实现文件处理的软件方面以及该问题的“始终在线”侦听能力,但从信号处理的角度来看,这就是您想要研究的内容。值得注意的是,您的滤波器不太可能匹配任何基于参考波形的拍手或任何球弹跳,但匹配的滤波器响应的幅度应该可以让您非常可靠地测量输入的接近程度。如果您收到大量误报,则可以使用更高级的技术,例如通过进行恒定的环境噪声测量并将幅度与这些值进行比较,要求滤波器响应达到一定的 SNR。

编辑:我重新阅读了您的问题,并确信这是正确的方法,但我建议不要尝试找到解决此问题的文件级解决方案。您要做的是打开“参考”文件并对音频数据进行时间反转。然后,当麦克风输入进入时,您将其与反向参考波形进行卷积(这是匹配滤波)。来自该卷积输出的强烈响应(脉冲)表示匹配。就工具而言,您甚至不需要强大的音频库,只需要能够以 1-D 矢量形式获取音频,然后进行时间反转和 1-D 卷积(矩阵库中的常见操作)的工具。