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

时间:2013-07-06 15:08:02

标签: c++ libsndfile

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

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

1 个答案:

答案 0 :(得分:2)

格式字段会为您提供BPS。例如:SF_FORMAT_PCM_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);