我想在ruby中构建一个语音识别引擎。我知道我永远不会到那里,只是为了好玩。我需要获取存储在wav文件中的声音频率的数据,以便与我想要识别的不同声音的数据进行比较。 我将在ruby中编写代码,但我不认为有任何用红宝石编写的库,如果有任何反正,它们会太慢。 关于ruby的好处是我将能够通过IronRuby或Java通过Jruby使用.net库。 我如何获得频率数据?
答案 0 :(得分:3)
波形文件并不太复杂,实质上它只是一系列音频样本:http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html。
一旦你可以读取样本,下一步就是通过FFT变换运行它们,以获得频率内容。应该有一些可以使用的开源实现,或者你可以自己实现一个。
你要做的事情需要对音频和信号处理背后的数学有所了解,所以也许你想要开始写一本关于这个主题的书。
答案 1 :(得分:0)
你应该阅读一些关于说话人识别的论文。此外,您可能会在Internet上找到许多库来解决此问题。 要构建说话人识别系统(识别系统或验证系统),您需要:
良好的音频功能(您希望找到能够明确描述数据集中每个扬声器语音的内容)大多数音频功能都是在排序词谱中提取的(这意味着在音频信号的小帧上采集的信号的FFT,其中信号应该是静止的)。但我们从不将频谱本身(FFT的对数)作为描述符(频谱中有太多无用的信息)。描述某人的声音最重要的是频谱的包络。你一定要看一下名为MFCC的音频描述符(对于梅尔频率倒谱系数),这是广泛使用的音频特征,用于说话人重复任务。
那么你还需要一个好的分类器(比如GMM,SVM ......),因为这个问题是使用有监督的机器学习算法来解决的。基本上,您需要为每个想要识别的扬声器训练模型,然后您将使用未用于训练的数据测试您的模型。模型