我正在尝试读取 24 位二进制数据,该数据存储在 2's Complement 的波形文件中。它以小端方式存储。我正在尝试将 3 个字符数组重新解释为 int32_t,然后将其转换为双精度。我已经非常接近了,但它以某种方式无法正常工作。
if (wavHead.getBits_per_Sample() == 24) {
unsigned char int24[3];
while (!is.eof()) {
int32_t val = 0;
is.read((char *) &int24, sizeof(char) * 3); //ifstream
if(int24[2] & 0x80) {
val = 0xff; //Checking for sign (MSB) and inverting it to bitshift to int32 MSB
int24[2] &= ~(0x80);
}
val = (val << 8) | ((u_int32_t)int24[2]);
val = (val << 8) | ((u_int32_t)int24[1]);
val = (val << 8) | ((u_int32_t)int24[0]);
cout << val / 8388608.0 << endl;
data.push_back(val / 8388608.0);
}
}
这是信号图。它应该是一个简单的 440 Hz 正弦音,但它没有居中并且看起来有点可疑: 波形文件的图