我正在开发一个项目,我必须使用java从音频.wav文件中提取人声。
音频.wav文件可能有3到4种声音,如狗,猫,音乐和人类。我将不得不识别人声,然后从音频.wav文件中提取该部分。
我正在使用FFT.java和Complex.java。
现在我编写了一个AudioFileReader类,它从硬盘驱动器中读取audio.wav文件,然后将其转换为bytes数组。然后使用上面提到的FFT.java和Complex.java来应用FFT.fft(bytesArray),这给了我复数数组作为回报;
现在问题是如何从返回的复杂数组中提取人类声音字节模式...有谁知道我怎么能够实现这个?
<小时/> 编辑:我们假设一个非常简单的audio.wav文件。例如,猫声然后沉默,人声然后沉默,狗声然后沉默等没有声音混合。
答案 0 :(得分:2)
我认为处理这类问题的标准方法是将输入信号转换为Cepstrum或Mel-Cepstrum表示,然后使用特征空间的系数输入分类器。有许多研究论文基于这种基本方法讨论这些问题的解决方案,例如:
http://www.ics.forth.gr/netlab/data/J17.pdf
您可能尝试的一种可能的捷径是将输入信号通过低比特率声码器(如AMBE),然后进行解码,并将原始信号的质量与编码/解码信号进行比较。这些声码器旨在高度压缩人类语音,质量保持良好,代价是不能充分代表非语音声音。
答案 1 :(得分:1)
这可以通过人工智能实现(而且还有一点点)。您可能会调查用于语音识别的API,但我怀疑它们是否能够在后台支持带噪声的信号。
E.G。
答案 2 :(得分:0)
这是一个经典的AI问题(机器学习/模式识别)看看the Wikipedia article
但基本上您需要已经将您输入算法的数据分类,以便它可以学习如何对新数据进行分类。但要注意,100%正确性对于该领域的几乎任何事情都是虚幻的,尽管对于您的简单问题它可能是可能的(取决于您对问题的确切定义)