我有两个大致相似(不相同)的音频文件,它们都是相同音频源材料的录音,但彼此独立。
我需要计算每个文件之间的时间偏移量,例如一个记录将在时间 A 开始,另一个在时间 B。通过检查和处理每个文件中的音频波形,我需要计算偏移量(A -乙)。
实现这一目标的典型和有效方法是什么?
可以假设两个文件都是单声道的,并且两个文件之间的采样率是一致的。
我有两个大致相似(不相同)的音频文件,它们都是相同音频源材料的录音,但彼此独立。
我需要计算每个文件之间的时间偏移量,例如一个记录将在时间 A 开始,另一个在时间 B。通过检查和处理每个文件中的音频波形,我需要计算偏移量(A -乙)。
实现这一目标的典型和有效方法是什么?
可以假设两个文件都是单声道的,并且两个文件之间的采样率是一致的。
互相关,找到最大值,并使用它来抵消一个文件与另一个文件。
同一首音乐的两个不同录音的速度通常会略有不同。您究竟想要同步什么:开始、结束或两者兼而有之?
您使用互相关来找出开始的差异和结束的差异。如果要同时同步两者,则需要对其中一个文件进行时间拉伸以匹配另一个文件的长度。
您得到的关于互相关函数的两个答案都非常有效,并且正如 Hilmar 所说,可能存在一些(大小取决于记录系统和其他可能的拓扑和环境因素)漂移/不一致的速度和/或捕获样品。
有大量关于互相关及其在延迟估计中的应用的科学文章,其中许多用于麦克风阵列中的到达方向 (DoA) 估计。
一般来说,您可以使用广义互相关函数(有关更多信息,您可以查看 Benesty、Chen 和 Huang 的“麦克风阵列信号处理”,或通用数字信号处理教科书,例如“数字信号处理 - 原理, 算法与应用"Proakis 和 Manolakis)来估计延迟。如果您对设备的稳定性有足够的信心,您可以对整个录制执行此操作,或者您可以对录制的块执行相同的操作,以估计每一帧的延迟。这可以提供一些洞察两个记录之间的速度/延迟的可变性。当然,如果您选择太小的数据帧,您可能会遇到错误的估计,因为相关算法需要足够的数据才能给出“好的”结果(它们最初是在统计基础上得出的)。
互相关函数最大值的索引应提供两次记录之间延迟(以样本为单位)的估计值,负值表示参考滞后于第二次记录。除此之外,许多作者(例如在Manolakis、Ingle 和 Kogon 的“统计和自适应信号处理 - 频谱估计、信号建模、自适应滤波和阵列处理”中)指出只有部分互相关函数是有效的,至于大滞后,音频信号的样本之间的相关性非常弱(简要说明)。当然,由于我们讨论的是完全相同的记录,因此此假设可能不适用于您的情况,但“不信任”大滞后值是一种好习惯。
此外,您还可以查看一篇论文( Stefanakis 和 Mouchtaris 撰写的“Synchronization Ambiguity in Audio Content Generated by Users Attending the Same Public Event”),说明在尝试同步同一事件的不同录音时存在一些歧义。不过,这可能与您的应用程序相关,也可能不相关。