我花了大部分时间在上午,使用发现的FFT
Java代码片段为该代码编写解决方案…但是后来我偶然发现了这个极为出色的Google代码项目,该项目具有一堆用于执行信号处理任务的util类在WAV和MP3文件上都一样。
https://github.com/Uriopass/audio-
analysis
以前SVN导出是在以下Google代码上进行的:https :
//storage.googleapis.com/google-pre-archive-source/v2/pre.google.com/audio-
analysis / source-archive.zip
现在,它变得异常简单:
WaveDeprer deprer = new WaveDeprer(new FileInputStream(wavFile));FFT fft = new FFT(1024, wavFileObj.getSampleRate());
现在,您可以使用fft对象进行各种计算。他们有很多很好的例子,例如生成包含光谱通量的列表:
float[] samples = new float[1024]; float[] spectrum = new float[1024 / 2 + 1]; float[] lastSpectrum = new float[1024 / 2 + 1]; List<Float> spectralFlux = new ArrayList<Float>(); while (deprer.readSamples(samples) > 0) { fft.forward(samples); System.arraycopy(spectrum, 0, lastSpectrum, 0, spectrum.length); System.arraycopy(fft.getSpectrum(), 0, spectrum, 0, spectrum.length); float flux = 0; for (int i = 0; i < spectrum.length; i++) flux += (spectrum[i] - lastSpectrum[i]); spectralFlux.add(flux); }
我的公司需要我一种分析音频的方法,以查看是否发生了预期的保持音乐。因此,首先,我为一个具有保留音乐的示例生成了一个WAV文件。然后,我捕获了其中一个没有保留音乐的示例的一些音频。现在剩下的就是对wav的频谱通量求平均,我就开始了。
注意:我不能简单地获取幅度…但是傅立叶变换具有可以正确用于进行比较的频率。
我爱数学。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)