-1

32 ビット float の wav データを解釈するには? wav データを I32 として読み取り、それを 2^31 で除算しましたが、正しい結果が得られません。

4

2 に答える 2

2

RIFFヘッダーを見てください。これにより、Wavファイルのエンディアンがわかります。

そのエンディアンを使用して、32ビットフロートを正しく読み込みます。例:システムがリトルエンディアン(たとえば、x86プロセッサに基づく)で、wavファイルがビッグエンディアン(たとえば、古いPPC Macで作成されたもの)の場合、読んだ後に32ビットのエンディアンスワップを実行する必要があります。 float変数に実際に意味のあるデータが含まれるようにデータ内に配置します(これは通常、-1.0fから1.0fの間の値です)。

于 2013-02-14T23:03:01.877 に答える
2

値は float です。これらを float 値に割り当てて、そのまま使用する必要があります。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

データのエンディアンはまだ調整が必要な場合があります。

于 2013-02-14T22:48:18.440 に答える