zse*_*edc 11 linux audio spectrum sox spectrogram
如何生成包含 wav/riff 声音文件频率频谱的文件?我想使用 linux 命令行。
我知道很酷的 sox 函数来生成 png 频谱图
sox sound.wav -n spectrogram
Run Code Online (Sandbox Code Playgroud)
但我不需要频率频谱的视觉表示。我只想在数据文件中获取频谱,以便我可以处理它们。我相信必须有使用 sox 的选项。Sox 需要在绘制数据之前生成该数据。如何得到这个?
不确定,也许第二个解决方案是将 wav 文件导出到 dat 文件中。来自 dat 文件的每个样本都是膜在某一时刻的位置的度量。所以这不是频谱。
sox sound.wav file.dat
Run Code Online (Sandbox Code Playgroud)
如何将这些膜位置转换为我需要的光谱?
谢谢。
怎么样:
sox sound.wav -n stat -freq &> file.dat
Run Code Online (Sandbox Code Playgroud)
这将产生file.dat如下内容:
// snip
23941.406250 175.471481
23953.125000 180.637909
23964.843750 188.179977
23976.562500 515.783813
23988.281250 1035.087280
Samples read: 618496
Length (seconds): 6.442667
Scaled by: 2147483647.0
Maximum amplitude: 0.999969
Minimum amplitude: -1.000000
Midline amplitude: -0.000015
Mean norm: 0.232281
Mean amplitude: 0.018063
RMS amplitude: 0.382168
Maximum delta: 1.999969
Minimum delta: 0.000000
Mean delta: 0.285226
RMS delta: 0.483500
Rough frequency: 9665
Volume adjustment: 1.000
Run Code Online (Sandbox Code Playgroud)
您正在寻找的称为傅里叶变换,或快速傅里叶变换(FFT)。FFT 是一种数学算法,可将 .wav 文件中包含的时域样本(即膜在时间点上的位置)转换为频率分量。如果您 Google FFT,您会找到更多信息,包括可以在 Linux 中编译和重用的源代码。请参阅如何使用 FFT 绘制 wav 文件的频谱?一个好的开始。