【发布时间】:2015-06-26 18:19:58
【问题描述】:
我想从 Qt 中的音频文件中读取 16 位整数样本值。
char tempbytes[3]; ///
int sampleposition;
int sample;
QFile file(sourcepath);
if (! file.open(QIODevice::ReadOnly | QIODevice::Text)) return;
sampleposition = 120
file.seek(sampleposition );
file.read(tempbytes, 2);
现在我有一个 char 数组,但我想将它转换为 16 位有符号整数值。 wave 文件中的字节顺序是 littleendian。
我已经试过了:
sample = qFromLittleEndian<qint16>((uchar*)tempbytes);
这适用于一些样本,但有些样本被完全误解为错误的值。我比较了大胆的时间信号图。
有没有更好的办法?
【问题讨论】:
-
你得到错误值的原因是因为表达式
(uchar*)tempbytes返回了tempbytes的内存地址。因此,您获得的值是地址,而不是音频样本。