32 ビット float の wav データを解釈するには? wav データを I32 として読み取り、それを 2^31 で除算しましたが、正しい結果が得られません。
質問する
1304 次
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 に答える