0

为什么我在尝试读取 .wav 文件并将其直接存储为double样本数据时得到NAN值?在考虑使用它之前,我将样本数据存储在smallint中,然后通过将其除以 32768.0(没有NAN值)将其转换为双精度,但后来我在将其转换回 wav 文件时遇到了四舍五入的准确性问题。

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

其中 buf 是双精度数组。不允许直接将它存储到double数组中吗?

4

1 回答 1

1

如果原始样本数据确实是 64 位双精度数(您使用什么音频格式来做到这一点?),那么是的,您可以直接读入双精度数数组,例如:

var
  buf: array of Double;

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

但是,大多数音频格式不使用双精度,因此您必须首先使用正确的数据类型(例如,用于 16 位 PCM 的 Smalllint)读入合适的缓冲区,然后再转换样本。

于 2013-05-14T17:49:36.007 回答