我在读取 16 位 .wav 文件时遇到问题。我已阅读标题信息,但是,转换似乎不起作用。
例如,在 Matlab 中,如果我读入波形文件,我会得到以下类型的数据:
-0.0064, -0.0047, -0.0051, -0.0036, -0.0046, -0.0059, -0.0051
但是,在我的 C++ 程序中,返回以下内容:
0.960938, -0.00390625, -0.949219, -0.00390625, -0.996094, -0.00390625
我需要以相同的方式表示数据。现在,对于8 bit
.wav 文件,我执行了以下操作:
uint8_t c;
for(unsigned i=0; (i < size); i++)
{
c = (unsigned)(unsigned char)(data[i]);
double t = (c-128)/128.0;
rawSignal.push_back(t);
}
但是,当我为 16 位执行此操作时,这很有效:
uint16_t c;
for(unsigned i=0; (i < size); i++)
{
c = (signed)(signed char)(data[i]);
double t = (c-256)/256.0;
rawSignal.push_back(t);
}
不起作用并显示输出(上图)。
我遵循此处找到的标准
数组在哪里,我可能data
只是在转换错误,但似乎无法找出在哪里。有人有什么建议吗?char
rawSignal
std::vector<double>
谢谢
编辑:
这是现在显示的内容(在图表中):
这是它应该显示的内容: