如何查找音频的一部分在另一个音频中开始和结束的时间?

Kad*_*baz 5 audio pattern-matching audio-fingerprinting

我有两个音频文件,其中一个句子被两个不同的人阅读(如唱一首歌).所以他们有不同的长度.它们只是声音,没有任何乐器.

A1:音频文件1
A2:音频文件2
样本句子: "Lorem ipsum dolor sit amet,..."

样本音频文件的结构

我知道每个单词在A1开始和结束的时间.我需要自动找到每个单词在A2开始和结束的时间.(任何语言,最好是Python或C#)

时间以XML格式保存.所以,我可以逐字分割A1文件.那么,如何在具有不同持续时间(单词)和不同声音的另一个音频中找到单词的声音?

Har*_*eem 5

因此,从我读到的内容来看,您似乎想要使用Dynamic Time Warping (DTW)。当然,我会留下维基百科的解释,但它通常用于识别语音模式,而不会因不同的发音而产生噪音。

遗憾的是,我更精通 C、Java 和 Python。所以我会推荐python库。

  1. 快点
  2. pydtw
  3. 米皮
  4. rpy2

使用rpy2,您实际上可以使用 R 的库并在您的 Python 代码中使用它们的 DTW 实现。可悲的是,我找不到任何好的教程,但是如果您选择使用 R,则有很好的示例。

如果这没有帮助,请告诉我,干杯!


Mar*_*eli 2

我的方法是以恒定间隔(例如每 100 毫秒)记录 dB 音量,并将该音量存储在列表或数组中。我在这里找到了一种在java上执行此操作的方法:Decibelvaluesat特定点在wav文件中。其他语言也是可能的。同时,记下最大音量:

max = 0;
currentVolume = f(x)
if currentVolume > max
{
  max = currentVolume
}
Run Code Online (Sandbox Code Playgroud)

然后将最大音量除以可编辑阈值,在我的示例中,我选择了 7。假设最大音量为 21,21/7 = 3dB,我们将此度量称为 X。

我们设置第二个阈值,例如 1,并将其乘以 X。每当音量大于这个新值 (1*x) 时,我们就认为这是单词的开头。当它小于给定值时,我们认为它是一个单词的结尾。

视觉解释