提取 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语言实现)

如何从 wav 文件中获取时域频率?

[Audio processing] wav音频文件读取int和double数组的关系

在 C++ 中使用 libsndfile 从 WAV 文件中提取原始音频数据

傅立叶变换以转置 wav 文件的密钥

从视频文件中提取wav文件