如何检查两个.wav文件是否包含相同的声音数据?

时间:2016-12-14 18:47:28

标签: c# audio

这是一个例子,我会尽量让它变得简单。

我有2个.wav / .mp3声音文件“A”和“B” “A”听起来像这样:“asdfasdafasfsaf DATA sdafsfdafsa”。
“B”听起来像这样:“ DATA ”。

现在我的问题是,如何检查“A”是否包含“B”? 我正在使用Visual Studio 2015并在C#中编码。没有第三方软件,它甚至可能吗? 提前致谢。

1 个答案:

答案 0 :(得分:0)

然而,这不是一件小事:

  • 如果两个wav文件具有相同的采样频率,那么您就可以了。如果没有,则必须重新采样以对应(使用工具或以编程方式)
  • 找出两个文件的实际数据开始位置(这可能会有很大差异,请阅读wav标题大小以及如何检测它们)
  • 将两个文件的数据读入字节数组

以上几乎是第0步。

  • 您的"样本"你正在寻找的,有一个长度。该长度将是目标字节数组的滑动窗口。
  • 如果您满足于搜索完全相同的样本(A的某些部分听起来完全像B),那么您可以对滑动窗口内容与参考样本进行哑比较(字节比较)。但是,如果你想在混音目标wav中找到你的样本(与其他声音或层混合在一起,所以A的某些部分有B在其中,但它只是你在时间索引时听到的x个事物之一然后根据我的理解,您将前往快速和/或离散傅立叶变换,隐马尔可夫模型或任何数量的模式识别算法。毫无疑问,这里的无数人比我更聪明,在数学方面可以说实事。只是......不是我。

直到数学部分,它非常简单,但真正的魔法开始时,你实施你所确定的算法。当然,您可以根据自己的要求和数学背景/技能/耐心等方式随意选择...

一个小小的注意事项:"这可能没有第三方软件"很少是一个真正相关的问题。第三方软件不是一些黑魔法,它只是由你和我这样的人编写的软件。不同之处在于,它有时由非常聪明的人(通常是复数人)编写,并且经常在很长一段时间内开发,测试和完善,所以如果问题是"可以做到"然后几乎总是"是"。如果问题是"我可以在很短的时间内自己复制一个完整,复杂和高性能的库。 ......好吧......也许我猜。