wav 文件的值

Values of a wav file

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

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

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

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 文件仅包含 raw 样本数据,前面有 header,而“频率”是数学抽象或分析结果。

您可能会感兴趣:

When converting between integer PCM formats of differing size (e.g. using sf_read_int() to read a 16 bit PCM encoded WAV file) libsndfile obeys one simple rule:

Whenever integer data is moved from one sized container to another sized container, the most significant bit in the source container will become the most significant bit in the destination container.

一定要通读手册,尤其是写得很清楚的时候。