使用java从wav文件中提取人声

时间:2011-03-24 07:46:42

标签: java algorithm signals javasound

我正在开发一个项目,我必须使用java从音频.wav文件中提取人声。

音频.wav文件可能有3到4种声音,如狗,猫,音乐和人类。我将不得不识别人声,然后从音频.wav文件中提取该部分。

我正在使用FFT.javaComplex.java

现在我编写了一个AudioFileReader类,它从硬盘驱动器中读取audio.wav文件,然后将其转换为bytes数组。然后使用上面提到的FFT.java和Complex.java来应用FFT.fft(bytesArray),这给了我复数数组作为回报;

现在问题是如何从返回的复杂数组中提取人类声音字节模式...有谁知道我怎么能够实现这个?

<小时/> 编辑:我们假设一个非常简单的audio.wav文件。例如,猫声然后沉默,人声然后沉默,狗声然后沉默等没有声音混合。

3 个答案:

答案 0 :(得分:2)

我认为处理这类问题的标准方法是将输入信号转换为Cepstrum或Mel-Cepstrum表示,然后使用特征空间的系数输入分类器。有许多研究论文基于这种基本方法讨论这些问题的解决方案,例如:

http://www.ics.forth.gr/netlab/data/J17.pdf

您可能尝试的一种可能的捷径是将输入信号通过低比特率声码器(如AMBE),然后进行解码,并将原始信号的质量与编码/解码信号进行比较。这些声码器旨在高度压缩人类语音,质量保持良好,代价是不能充分代表非语音声音。

答案 1 :(得分:1)

这可以通过人工智能实现(而且还有一点点)。您可能会调查用于语音识别的API,但我怀疑它们是否能够在后台支持带噪声的信号。

E.G。

  • 是猫还是有人说'喵'?
  • 那是音乐,还是有人在唱'做,重新,是......'?
  • 谁说'Polly想要饼干',人类或鹦鹉?

答案 2 :(得分:0)

这是一个经典的AI问题(机器学习/模式识别)看看the Wikipedia article

但基本上您需要已经将您输入算法的数据分类,以便它可以学习如何对新数据进行分类。但要注意,100%正确性对于该领域的几乎任何事情都是虚幻的,尽管对于您的简单问题它可能是可能的(取决于您对问题的确切定义)