如何在 C++ 中读取原始音频数据?

How to read raw audio data in c++?

我正在尝试对音频文件进行傅立叶变换。到目前为止,我已经设法在 this answer. This 的帮助下读取了文件的 header 是输出。

音频格式为 1,表示 PCM,我应该可以轻松处理这些数据。但是,这是我无法弄清楚的。

数据是二进制的,我应该把它转换成浮点数或其他我无法理解的东西吗?

是的,它是二进制的。具体来说,它是带符号的 16 位整数。 您可能希望根据您的 FFT 需要将其转换为 float 或 double。

我建议您使用单声道输入音频文件...您显示的示例有两个声道(立体声),这会使数据稍微复杂化...对于单声道 PCM 文件,结构是

two-bytes-sample-A  immediately followed by two-bytes-sample-B ... etc.

在 PCM 中,每个这样的样本直接对应于模拟音频曲线上的一个点,因为麦克风振膜(或您的耳膜)摆动......注意正确使用数据的字节顺序,每个样本都会导致使用所有 16 位的整数,因此无符号整数的值从 0 到 (2^16 - 1),即 0 到 65535 ....如果它们是无符号的

,请确认您的样本保持在此范围内