如何解释32位浮点数wav数据?我正在读取w32数据为I32,然后除以2 ^ 31,但没有得到正确的结果。
答案 0 :(得分:2)
值为float。您必须将它们分配给浮点值并使用它们。如果要将浮点值读入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
可能仍需要调整数据的字节顺序。
答案 1 :(得分:2)
看看你的RIFF header。这将告诉您Wav文件的字节顺序。
使用该endian-ness正确读取32位浮点数。例如:如果您的系统是小端(例如,基于x86处理器)并且您的wav文件是大端(例如,在旧的PPC mac上创建),则在阅读后需要执行32-bit endian swap在数据中,以便你的浮点变量实际上包含有意义的数据(这通常是-1.0f和1.0f之间的值)