我有一个名为“file.wav”的 wav 文件,我想用 C 程序读取文件的一些规范。我在这里找到了 wav 文件的结构。根据这个文档,在普通的 wav 文件中,AudioFormat 字节应该是 0x1 和 0x0,或者 NumChannels 字节应该是(如果是单声道)0x1 和 0x0;有很多类似的部分应该看起来像这样。
现在,我的 C 程序非常简单:我以二进制模式打开文件,寻找 AudioFormat 部分(第 20 个字节),读取两个字节并将它们放入缓冲区;然后我打印到标准输入缓冲区内容。
#include <stdio.h>
main()
{
void *buf[2];
FILE *f;
f=fopen("file.wav", "rb");
fseek(f, 20, SEEK_SET);
fread(buf, 1, 2, f);
printf("example: %#hx %#hx\n", buf[0], buf[1]);
/*the '#' flag stands for the 0x[···] format output,
the 'h' says that the number is a short integer (2 bytes).*/
return 0;
}
我的问题是第二个字节而不是 0x0 始终是 0x4e0,对于每个应该为 0 的字节(例如 NumChannels 或 BitPerSamples 字节)。问题是什么?