使用linux命令行从WAV/RIFF获取频谱

使用linux命令行从WAV/RIFF获取频谱,linux,audio,sox,spectrum,spectrogram,Linux,Audio,Sox,Spectrum,Spectrogram,如何生成包含wav/riff声音文件频谱的文件?我想使用linux命令行 我知道生成png光谱图的酷sox函数 sox sound.wav -n spectrogram 但我不需要频率频谱的直观表示。我只想得到数据文件中的频率谱,这样我就可以处理它们了。我相信一定有一个选择使用sox。Sox需要在绘制数据之前生成该数据。如何得到这个 不确定,可能第二种解决方案是将wav文件导出到dat文件中。dat文件中的每个样本都是对某一时刻膜位置的测量。所以这不是频谱 sox sound.wav file

如何生成包含wav/riff声音文件频谱的文件?我想使用linux命令行

我知道生成png光谱图的酷sox函数

sox sound.wav -n spectrogram
但我不需要频率频谱的直观表示。我只想得到数据文件中的频率谱,这样我就可以处理它们了。我相信一定有一个选择使用sox。Sox需要在绘制数据之前生成该数据。如何得到这个

不确定,可能第二种解决方案是将wav文件导出到dat文件中。dat文件中的每个样本都是对某一时刻膜位置的测量。所以这不是频谱

sox sound.wav file.dat
如何将这些膜的位置转换成我需要的光谱


谢谢。

您正在寻找的是所谓的傅里叶变换,或快速傅里叶变换(FFT)。FFT是一种数学算法,它将包含在.wav文件中的时域样本(如您所说,膜在时间点上的位置)转换为频率分量。如果你在谷歌上搜索FFT,你会发现更多的信息,包括可以在Linux中编译和重用的源代码。请参阅以获得良好的开端。

您可以在sox中尝试stat选项

play track.wav stat -freq
怎么样

sox sound.wav -n stat -freq >& file.dat

谢谢直接从SOX使用它怎么样?Sox必须在绘制频谱图之前进行FFT以生成频谱数据。它工作得非常快。我同意SOX必须在内部进行FFT来生成频谱。但是,我不确定是否有办法让SOX输出原始FFT数据。但是,您可以使用SOX从wav文件中提取数字样本,您需要将其输入FFT程序。有关这方面的更多想法,请参阅Randall Cook的答案。SoX目前还不支持这一点。我编写了一个补丁,添加了一个
-O文件
选项,该选项将计算出的数据保存到
文件
。查看邮件列表:现在,几年后,它支持它。