我想从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位有符号整数值。波形文件中的字节顺序是littleendian。
我已经尝试过:
sample = qFromLittleEndian<qint16>((uchar*)tempbytes);
这适用于某些样本,但有些样本完全被误解为错误的值。我将大胆时间信号的图表进行了比较。
有更好的方法吗?
答案 0 :(得分:2)
无论它是否是“更好”的解决方案,我发现在这些类型的案例中使用QDataStream
更为简单。它具有reading 16-bit integers的重载。
这是一个非常基本的例子:
// Open the file and create our data stream
QFile file("filename");
file.open(QIODevice::ReadOnly);
QDataStream in(&file);
in.setByteOrder(QDataStream::LittleEndian);
// Read a 16-bit sample
qint16 sample;
in >> sample
答案 1 :(得分:0)
源文件不是文本文件,因此请不要将其视为文本文件。打开它的正确方法是:
if (! file.open(QIODevice::ReadOnly)) return;