如何从音频文件中分割男声和女声(用c ++或java格式)

时间:2009-03-03 08:47:09

标签: audio speech-recognition speech

我想区分音频文件中的男性和女性声音并将它们分开。作为输出,我希望将两个声音分开。可以请你帮我解决,可以用java或c ++完成编码

5 个答案:

答案 0 :(得分:12)

这可能是一个非常复杂的问题,它类似于编写自己的语音识别(或识别)算法。

您首先要将音频转换为频域,这是使用Fast Fourier Transform完成的。

对于每次采用FFT的切片,这将为您提供频率及其幅度的列表。你会以某种方式通过分析谐波来检测基音。二次和三次谐波最清晰。很难弄清楚它们是哪种谐波,尤其是背景噪声以及人们声音中谐波最大的自然差异。然后,您可以尝试通过您猜测的基本音调来判断说话者是男性还是女性。

请记住,在许多词性中,如s s声('s','t'等)没有音调,只有噪音。它需要非常聪明。

希望能让你朝着正确的方向前进。

注意:如果两个声音是同时发生的,并且你想要将它们分开,那么这对你没有帮助。我不相信任何活着的人都解决了这个问题。

答案 1 :(得分:2)

我认为这已经成为可能了。我刚刚开始在斯坦福大学和Andrew Ng教授一起参加机器学习的在线课程,在第一次演讲中他展示了一个演示,其中处理了两个重叠声音的录音并且提取了个别声音(同样是音乐背景和一个人说话)。显然,它使用无监督学习算法,允许它提取两个底层模式。您可能希望查看该课程(此处有一个版本的课程:http://www.academicearth.org/courses/machine-learning

答案 2 :(得分:2)

使这成为可能的一个工具是 LIUM spkdiarization 。它是用Java编写的,可在GPL下获得,它是一种语音识别工具,使用男性,女性和儿童的统计模型。幸运的是,提供了模型,您可以使用它而无需标记录音并训练模型。

有关示例,请参阅scripting page of the LIUM wiki,在页面中搜索“性别”。

答案 3 :(得分:0)

你在问什么是一项艰巨的任务。 thomasrutter写了一些“指针”如何做到这一点 - 但是,我想如果你想在任何地方使用它(在各种音乐中(当然都有歌唱)),算法必须非常强大。)也许从歌曲中分离(分割)单个乐器样本会更好/更容易。

答案 4 :(得分:0)

我首先要说这是不可能的。语音识别真的很难。

你的问题不清楚 - 声音是否重叠?如果是这样,将它们分开将是非常困难的。

如果它们是分开的,你更可能的赌注是拥有大量的男性和女性声音样本,并寻找共同特征(以及以编程方式识别它们的方式)。如果样品没有干净地记录(如果它们有背景噪音),事情会变得更加复杂。

你可能会有平均的语气 - 男性的声音通常比女性更深。