【发布时间】:2021-04-02 11:43:41
【问题描述】:
我正在尝试读取 24 位二进制数据,该数据存储在 2 的补码中的波形文件中。它以小端方式存储。 我正在尝试将 3 个 char 数组重新解释为 int32_t,然后将其转换为 double。 我已经很接近了,但不知何故无法正常工作。
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 正弦音,但它没有居中并且看起来有点可疑: plot of the wave file
【问题讨论】: