如何解释 32 位浮点 wav 数据?我将 wav 数据读取为 I32,然后将其除以 2^31,但没有得到正确的结果。
问问题
1304 次
2 回答
2
值是浮动的。您必须将它们分配给浮点值并按原样使用它们。如果您将浮点值读入 int32 值,则相当于进行了 reinterpret_cast。
float f1 = 1.0e5;
int i1 = *reinterpret_cast<int*>( &f1 );
// i1 = 1203982336, not 100000
如果你无法避免得到错误的值,那么为了得到“正确”的值,你需要反向重新解释
float f2 = *reinterpret_cast<float*>( &i1 );
// f2 = 1.0e5
数据的字节顺序可能仍需要调整。
于 2013-02-14T22:48:18.440 回答
2
查看您的RIFF 标头。这将告诉您 Wav 文件的字节顺序。
使用该字节序正确读取 32 位浮点数。例如:如果您的系统是 little endian(例如,基于 x86 处理器)并且您的 wav 文件是 big endian(例如,在旧的 PPC mac 上创建),您需要在阅读后进行32 位 endian 交换在数据中,以便您的浮点变量实际上包含有意义的数据(这通常是 -1.0f 和 1.0f 之间的值)
于 2013-02-14T23:03:01.877 回答