如何解释32位浮点数wav数据

时间:2013-02-14 22:42:57

标签: c++ c floating-point wav

如何解释32位浮点数wav数据?我正在读取w32数据为I32,然后除以2 ^ 31,但没有得到正确的结果。

2 个答案:

答案 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之间的值)