只是出于好奇,同时学习波形文件格式和 C++,我偶然发现了这个页面,详细介绍了波形格式的规范布局
现在,我尝试编写一个 C++ 程序来读取采样率
char buffer[4];
// already read other values before reading sample rate
inFile.read(buffer, 4);
// conversion using little endian
sampleRate = (long) buffer[0] + ((long) buffer[1] << 8) + ((long) buffer[2] << 16) + ((long) buffer[3] << 24);
在十六进制编辑器中,我可以看到我的样本波形文件的采样率为44 ac 00 00
,转换为 44100 速率。但是,使用上面的代码,我总是以 -21436 结尾
经过一些调试,原来的十六进制值“ac”应该在 dec 中转换为 172,但 C++ 假定十六进制值是“ffffffac”,在 dec 中转换为 -84。如果 C++ 只是假设它是简单的“ac”,那么我最终会得到正确的采样率值。
所以问题是,我如何从波形文件中读取数据并实际获得正确的采样率?我必须做一些魔术来去除前导的“f”吗?
提前致谢!