提取 Wav 文件的时域 double[] 以输入到 FFT - Java
Posted
技术标签:
【中文标题】提取 Wav 文件的时域 double[] 以输入到 FFT - Java【英文标题】:Extract Time Domain double[] of Wav file for input into FFT - Java 【发布时间】:2014-01-09 03:24:03 【问题描述】:我有一个 wav 文件,但不知道如何从中提取我需要的数据以将其放入快速傅里叶变换 (FFT) 以进行进一步分析...
我已经做了很多谷歌搜索和搜索,但没有找到具体的东西......
The FFT algorithm code:
public class ShortTimeFourierTransform
public static double[][] magnitudeSpectrum(double[] signal, int windowSize, int hopSize) ...
...
接收信号的 double[] 所以我假设我必须弄清楚如何解析 wav 文件并获得一个 double[t] 其中“t”是时间,而 double[t] 将是wav 文件在时间 t 的幅度。
我不知道如何继续。大多数解决方案似乎将 wav 导出为字节,根据 (https://ccrma.stanford.edu/courses/422/projects/WaveFormat/) 手动解析 wav 文件似乎要复杂得多
非常感谢!
【问题讨论】:
我今天也有同样的问题。该死的...xkcd.com/979 【参考方案1】:.wav 格式只是音频编码的包装格式。您需要:
解析.wav文件,获取编码音频 解码音频,获取原始 PCM 音频字节(PCM 也是一种编码,但易于使用) 将音频转换为您需要的任何格式。 (一些双打?)没有真正的解决方法-除非您可以更改文件的格式。
如果您可以更改文件格式,我建议使用程序(如 Audacity)打开 wav 文件,并保存其原始 PCM 编码字节。这样您就不必担心 .wav 格式了。
一个好的第 3 方库可以帮助您解决这个问题。不过我没有建议。
【讨论】:
以上是关于提取 Wav 文件的时域 double[] 以输入到 FFT - Java的主要内容,如果未能解决你的问题,请参考以下文章
wav音频文件解析读取 定点转浮点分析 幅值提取(C语言实现)
[Audio processing] wav音频文件读取int和double数组的关系