【问题标题】:How to split male and female voices from an audio file(in c++ or java)如何从音频文件中分离男性和女性的声音(在 C++ 或 Java 中)
【发布时间】:2013-06-09 21:40:26
【问题描述】:

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

【问题讨论】:

  • 他们是在同时说话吗?即,这是关于将两个说话的声音分开,还是只是确定一次说话的是哪一个?

标签: audio speech-recognition speech


【解决方案1】:

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

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

对于您进行 FFT 的每个时间片,这将为您提供频率及其幅度的列表。您将需要通过分析谐波来检测基音。 2 次和 3 次谐波将最清晰。很难弄清楚它们是哪些谐波,尤其是在背景噪声和人们的声音之间的自然差异方面,哪些谐波最大。然后,您可以尝试根据您猜到的基本音调来确定说话者是男性还是女性。

请记住,在诸如齿音(“s”、“t”等)的许多词性中,没有音调,只有噪音。它需要非常聪明。

希望这能让您朝着正确的大方向前进。

注意:如果两个声音是同时的,并且您想将它们干净地分开,那么这对您没有帮助。我不相信活着的人已经解决了这样的问题。

【讨论】:

  • +1。只是为了支持其他人,分割同时的声音是一个难题,即使是最好的音频处理器也无法以任何高可靠性解决。
【解决方案2】:

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

【讨论】:

  • 有用的参考。如果您看过演示文稿,您能否提供一些关于该算法如何工作的概述?这是对一些样本的一种“训练”吗?
  • 正是这个讲座促使我寻找这个 Stackoverflow 问题,所以我陷入了参考循环。这显然是一个不平凡的问题,我还没有看到在 Ng 的演讲之外对实现的讨论。我相信 Ng 在本次讲座中提到他是 SPSS 专家,但我想在 R 中尝试一下。
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

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

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

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

    你可能会以平均音调逃脱 - 男性的声音通常比女性的低..

    【讨论】:

    • 是的,我喜欢这个想法,一种统计方法。您可以让它了解得越正确。
    【解决方案5】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-04
      • 2021-04-21
      • 1970-01-01
      • 2018-04-28
      • 2017-10-10
      • 2017-06-20
      • 2015-08-29
      • 2022-10-07
      相关资源
      最近更新 更多