使用libsndfile库读取C++中的WAV文件

Using the libsndfile library to read a WAV file in C++

本文关键字:中的 WAV 文件 C++ 读取 libsndfile 使用      更新时间:2023-10-16

我正在C++中使用libsndfile读取WAV文件。有两点我不明白:

  1. 如何获得WAV文件的"每个样本位数"值?我在网站上阅读了文档http://www.mega-nerd.com/libsndfile/api.html,但我在SF_INFO结构中找不到"Bits per sample"的成员
  2. 使用WAV文件,我如何创建数据来绘制矢量,用于描述由库sndfile.h中的函数sf_readf_float()读取的声音数据?有什么方法可以做到这一点吗

格式字段将为您提供BPS。例如:SF_FORMAT_PMC_16。

无论输入声音的bps如何,sf_readf_float都会将样本转换为-1.0到1.0的范围。你只需要注意音频频道。如果音频有2个通道,并且您读取4个浮动,则您将具有:

sample-1 of left channel
sample-1 of right channel
sample-2 of left channel
sample-2 of right channel

然后,要绘制点,必须将[-1.0;1.0]转换为视口高度。例如,如果视口在Y=20,高度为300px,则公式为:

PY = (int)(20.0 + (sample_value / 2.0 + 0.5) * 300.0);