【发布时间】:2013-06-09 21:40:26
【问题描述】:
我想区分音频文件中的男性和女性声音并将它们分开。作为输出,我希望将两个声音分开。你能帮我看看,编码可以用 java 还是 c++ 完成
【问题讨论】:
-
他们是在同时说话吗?即,这是关于将两个说话的声音分开,还是只是确定一次说话的是哪一个?
标签: audio speech-recognition speech
我想区分音频文件中的男性和女性声音并将它们分开。作为输出,我希望将两个声音分开。你能帮我看看,编码可以用 java 还是 c++ 完成
【问题讨论】:
标签: audio speech-recognition speech
这可能是一个非常复杂的问题,类似于编写自己的语音识别(或识别)算法。
您首先将音频转换为频域,这是使用Fast Fourier Transform 完成的。
对于您进行 FFT 的每个时间片,这将为您提供频率及其幅度的列表。您将需要通过分析谐波来检测基音。 2 次和 3 次谐波将最清晰。很难弄清楚它们是哪些谐波,尤其是在背景噪声和人们的声音之间的自然差异方面,哪些谐波最大。然后,您可以尝试根据您猜到的基本音调来确定说话者是男性还是女性。
请记住,在诸如齿音(“s”、“t”等)的许多词性中,没有音调,只有噪音。它需要非常聪明。
希望这能让您朝着正确的大方向前进。
注意:如果两个声音是同时的,并且您想将它们干净地分开,那么这对您没有帮助。我不相信活着的人已经解决了这样的问题。
【讨论】:
我认为这已经成为可能。我刚开始与 Andrew Ng 教授一起参加斯坦福大学的机器学习在线课程,在第一堂课中,他展示了一个演示,其中处理了两个重叠声音的录音并提取了单个声音(与音乐相同)背景和说话的人)。显然,它使用了一种无监督学习算法,可以提取两种底层模式。您可能想查看该课程(这里有该课程的一个版本:http://www.academicearth.org/courses/machine-learning)
【讨论】:
LIUM spkdiarization 是一种使这成为可能的工具。它是用 Java 编写并在 GPL 下可用,是一种语音识别工具,使用男性、女性和儿童的统计模型。幸运的是,我们提供了模型,您可以使用它而无需标记记录和训练模型。
请参阅scripting page of the LIUM wiki 了解示例,在页面中搜索“性别”。
【讨论】:
我首先要说这是不可能的。语音识别真的非常非常难。
您的问题不清楚 - 声音是否重叠?如果是这样,拆分它们将非常困难。
如果它们是分开的,您更有可能的选择是拥有大量男性和女性声音样本,并寻找共同特征(以及一种以编程方式识别它们的方法)。如果样本记录不干净(如果它们有背景噪音),事情就会变得更加复杂。
你可能会以平均音调逃脱 - 男性的声音通常比女性的低..
【讨论】:
您要问的是一项艰巨的任务。 thomasrutter 写了一些“指针”如何做到这一点 - 但是,我想如果您希望在任何地方使用它(在各种音乐中(当然是唱歌)),该算法必须非常强大。也许从歌曲中分离(拆分)单个乐器样本开始会更好/更容易。
【讨论】: