Java 如何从波形文件中获取音频数据?

Java 如何从波形文件中获取音频数据?,java,.net,ruby,audio,Java,.net,Ruby,Audio,我想用ruby构建一个语音识别引擎。我知道我永远也到不了那里,只是为了好玩。我需要获取wav文件中存储的声音频率数据,以便与我想要识别的不同声音的数据进行比较。 我将用ruby编写代码,但我不认为有任何库是用ruby编写的,如果有的话,它们会太慢。 ruby的好处是,我可以通过IronRuby使用.net库,也可以通过Jruby使用Java库。 如何获取频率数据?波形文件并不太复杂,本质上它只是一系列音频样本: 一旦可以读取样本,下一步就是通过FFT变换运行它们,以获得频率内容。应该有一些开源的

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

波形文件并不太复杂,本质上它只是一系列音频样本:

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


你想做的事情需要对音频和信号处理背后的数学有一定的了解,所以也许你想从这方面的书开始。

你应该读一些关于说话人识别的论文。你也可以在网上找到很多图书馆来解决这个问题。 要构建说话人识别系统(识别系统或验证系统),您需要:

  • 好的音频特征(您想找到一种能以单音形式描述数据集中每个扬声器声音的方法)大多数音频特征都是在分类术语频谱上提取的(这意味着在音频信号的小帧上提取的信号的FFT上,信号应该是静止的). 但是我们从不把频谱本身(FFT的对数)作为描述符(频谱中有太多无用的信息)。描述某人的声音最重要的是频谱的包络。您一定要看看名为MFCC(用于Mel频率倒谱系数)的音频描述符,它是mot广泛用于扬声器录制任务的音频功能

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