语音比对算法

8

如果有两个数字化格式的录音声音,是否有一种算法可以比较这两个声音并返回相似度系数呢?


5
你是想确定说话者是否相同或相似,还是要确定言论本身是否相同或相似,或者两者都是? - Tim Post
抱歉我没有澄清:独立于说话者之外是首选。我正在寻找语音本身的相似性。 - ohho
4个回答

4
鉴于您的澄清,我认为您所寻找的内容属于语音识别算法
即使您只是想寻找相似度的度量而不是将语音转换成文本,但这些概念仍然相同,如果算法的大部分内容非常有用,我也不会感到惊讶。
然而,您必须更正式、更精确地定义这个相似度系数才能取得进展。
编辑: 我认为语音识别算法会很有用,因为它们对声音进行抽象和与某些已知形式进行比较。从概念上讲,这可能与获取两个录音、对其进行抽象和比较并没有太大的区别。
来自HMM维基百科文章
在语音识别中,隐马尔可夫模型会输出一个n维实值向量序列(n是小整数,如10),每10毫秒输出其中一个。这些向量由倒谱系数组成,通过对语音的短时间窗口进行傅里叶变换并使用余弦变换去相关化频谱获得,然后取前几个(最重要的)系数。因此,如果你在两个录音上运行这样的算法,你将得到代表录音的系数,这可能更容易测量和确定两者之间的相似性。但现在你又面临着定义“相似系数”的问题,而引入狗和马并没有真正帮助解决这个问题。(好吧,有点用,但在评估算法和选择一个算法胜过另一个方面,你需要做得更好)。

我不会从声源中获得任何“含义”。例如,如果我录制了两只狗的吠叫和一匹马的嘶鸣声,将两只狗的吠叫进行比较应该会得到一个“更高”的系数,而将吠叫声与嘶鸣声进行比较则不然。 - ohho
@Horace Ho,在回答的编辑部分进行了回复。 - Unreason

4
我建议您查看HTK语音识别工具包,网址是http://htk.eng.cam.ac.uk/,特别是其中有关特征提取的部分。
我认为下面这些特征会是不错的指标:
  • Mel倒谱系数(一般音色)
  • LPC(用于谐波)

许可证(http://htk.eng.cam.ac.uk/docs/license.shtml)允许将工具包用于另一个应用程序的分发吗? - ohho
据我所记,它非常受限制。但是你也可以尝试免费软件http://clam-project.org/。在那里,您将找到HTK提供的特征提取算法的高效实现(以及更多)。 - Miquel Ramirez

3

0
我不确定这对声音文件是否有效,但我希望可以让你了解如何继续。这是一种在另一个图像中查找模式(图像)的基本方法。
首先,您必须计算两个声音文件的FFT,然后进行相关性分析。在公式中,它看起来像(伪代码):
fftSoundFile1 = fft(soundFile1);
fftConjSoundFile2 = conj(fft(soundFile2));
result_corr = real(ifft(soundFile1.*soundFile2));

其中fft代表快速傅里叶变换,ifft代表反变换,conj代表共轭复数。

fft是在声音文件的样本值上执行的。结果相关向量中的峰值将给出高相关性的位置。

请注意,两个声音文件在此情况下必须具有相同的大小-否则,您必须将较短的一个放入最大(soundFileLength)向量的文件中。

敬礼

编辑:.*表示(在Matlab风格中)逐分量乘法,不得进行向量乘法! 下一步编辑:请注意,您必须使用复数进行计算-但是有几个复数类可用,因此我认为您不必担心这个问题。


1
这甚至不能算是一个可行的解决方案。语音的频谱是时变和嘈杂的。你只能针对非常小的片段进行类似的处理,比如说说话者在发同一个元音,即使这样,它可能也不会很好地工作,或者根本无法工作。 - Paul R
抱歉,我不是“语音专家”,但是我认为对于一个简单的“这些声音文件有多相似”的问题,首先尝试使用图像处理方法可能是可以的。 - InsertNickHere

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接