wav文件的值

时间:2016-05-18 17:54:35

标签: c audio wav libsndfile

在C中,我使用Libsndfile库来帮助我读取wav文件的值,以便我可以在之后对它们进行一些计算。虽然,当我得到文件的输出时,我不确定这些数字是什么意思。为什么这些数字是数百万?起初我以为它是赫兹,但它在我的脑海里没有意义。有关wav文件的信息可以在下面看到。在此之下,我使用函数sf_read_int()将值写入内存。

sf_read_int()做什么?这是从libsndfile的api文档中获得的:

  • 文件写入项目函数将ptr指向的数组中的数据写入文件。 items参数必须是通道数的整数乘积,否则将发生错误。

enter image description here

Suspected values of the wav file

我决定在图表上绘制一些这些巨大的值,它看起来非常类似于wav文件的样子(如果我导入到audacity并放大特定位置,我会看到这个)。请注意,显示的值与图表上的值不同,我在随机时间点对值进行采样。 所以我想真正的问题是,为什么这些价值如此之大(以百万计)?它们代表什么? (它们是字节吗?)

enter image description here

1 个答案:

答案 0 :(得分:3)

limits.h中你可以找到两个这样的定义(其中包括):

#define INT_MAX 0x7FFFFFFF
#define INT_MIN 0x80000000

,对应于-2147483648和2147483647之间的小数范围。

Libsndfile手册说:

sf_count_t  sf_read_int(SNDFILE *sndfile, int *ptr, sf_count_t items);

即,将声音文件内容读入int *ptr指向的整数值。 INT_MININT_MAX之间的任何值都是合法值。在libsndfile API中,调用程序使用的数据类型和文件的数据格式不需要相同。

请注意,没有"频率"在声音文件中。线性PCM文件仅包含以标题开头的原始样本数据,而"频率"是一种数学抽象或分析结果。

这可能是您感兴趣的:

  

在不同大小的整数PCM格式之间进行转换时(例如,使用sf_read_int()读取16位PCM编码的WAV文件)libsndfile遵循一个简单的规则:

     

每当整数数据从一个大小的容器移动到另一个大小的容器时,源容器中最重要的位将成为目标容器中最重要的位。

请务必仔细阅读本手册,尤其是清楚写明时。