如何在 C++ 中显示来自 wav 文件的频谱图?

How do I display a spectrogram from a wav file in C++?

我正在做一个项目,我想在其中将图像嵌入到 .wav 文件中,这样当人们看到使用特定参数的频谱图时,他们就会看到隐藏的图像。我的问题是,在 C++ 中,如何在不使用任何信号处理库的情况下使用 wav 文件中的数据来显示频谱图?

数学解释(尤其是 Hanning window)也会有很大帮助,我对信号处理还很陌生。此外,由于这是一个非常广泛的问题,详细的步骤比实际的代码更可取。


示例:

上图:输出频谱图; 下面:输入音频波形(.wav 文件)

部分步骤(分别写C代码):

将数据转换为数字样本数组。

将示例数组切成一定大小的块,(通常)重叠。

(通常)Window 具有一些 window 功能。

对每个块进行 FFT。

量级。

(通常)拿日志。

Assemble 将所有一维 FFT 结果向量转换为二维矩阵。

规模。

为矩阵着色。

渲染 2D 位图。

(可选)(通过将上面的一些内容滚动到一个循环中进行优化。)

添加情节装饰(比例、网格标记等)