2010-04-24 84 views
3

我想用ruby构建语音识别引擎。我知道我永远不会到达那里,只是为了好玩。我需要获取存储在wav文件中的声音频率的数据,以便与我想要识别的具有不同声音的数据进行比较。 我会在ruby中编写代码,但是我不认为有任何用Ruby编写的库,如果有的话它们会太慢。 关于ruby的好处是我可以通过IronRuby或Java通过Jruby为.net使用库。 我怎样才能得到频率数据?如何从wave文件中获取音频数据?

回答

3

波形文件不是太复杂,实质上它只是一系列音频样本:http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html

一旦您可以读取样本,下一步就是通过FFT转换来运行它们,以便获取频率内容。应该有一些可以使用的开源实现,或者你可以自己实现一个。

你所要做的事情需要对信号处理背后的音频和数学有所了解,所以也许你会想从一本关于这个主题的书开始。

+0

+1,专门为最后的建议 – leonbloy 2010-04-25 02:26:23

0

您应该阅读一些关于说话人识别的论文。而且你也可以在因特网上找到许多库来解决这个问题。 要建立一个说话人识别系统(可以识别系统或验证系统),你需要:

  • 音频功能(你想找到的东西,将描述你有每个扬声器明确地声音数据集)中,大多数音频特征是在分类术语频谱上提取的(这意味着对信号应该静止的音频信号的小帧采取的信号进行FFT处理)。但我们从不将频谱本身(FFT的对数)作为描述符(频谱中太多无用的信息)。描述某人的声音最重要的是频谱的包络。你一定要看一下名为MFCC的音频描述符(对于Mel频率倒谱系数),这是广泛用于扬声器识别任务的音频特征的动机。

  • 那么你还需要一个好的分类器(类似于GMM,SVM ...),因为这个问题是使用监督机器学习算法解决的。基本上,您需要为每个想要识别的扬声器训练模型,然后使用尚未用于训练的数据测试模型。该模型