0

.wav ファイルを読み取ってサンプル データをdoubleに直接保存しようとすると、 NAN値が取得されるのはなぜですか? これを使用することを考える前に、サンプル データをsmallintに格納し、それを 32768.0 で割って double に変換していました ( NAN値はありません)。しかし、後で wav ファイルに変換するときに四捨五入の精度の問題が発生しました。

SetLength(buf, ckiData.cksize);
mmioRead(HMMIO, PAnsiChar(buf), ckiData.cksize);

buf は double の配列です。double の配列に直接格納することはできませんでしたか?

4

1 に答える 1

1

生のサンプル データが実際に 64 ビット double である場合 (どのオーディオ フォーマットを使用していますか?)、はい、double の配列に直接読み取ることができます。

var
  buf: array of Double;

SetLength(buf, ckiData.cksize div SizeOf(Double));
mmioRead(HMMIO, PAnsiChar(buf), Length(buf) * SizeOf(Double));

ただし、ほとんどのオーディオ形式は double を使用しないため、最初に正しいデータ型 (たとえば、16 ビット PCM の場合は Smallint) を使用して適切なバッファーに読み取り、その後サンプルを変換する必要があります。

于 2013-05-14T17:49:36.007 に答える