在读取文件时用Qfile file.read先读取表头信息再读取音频数据
表头信息读取参考了https://blog.csdn.net/GoForwardToStep/article/details/52789253
数据滤波处理时使用计算出滤波参数后,在线性卷积时发现总会卡死到双重for循环中(下面是已经修改后的)
for( int i=0; i<nSampleCnt; i++)
{
for( int j=0; j<nFilterLen; ++j )
{
res[i+j] += (short)(pFilterData[j]*(double)wavData[i]);
}
}
后来发现读取文件时使用的是QByteArray,给类型读取时每一位是char型,而数据处理时是short型,所以需要进行一下转换
读取时的转换:
short* wavData;
QByteArray gbry;
gbry=fileInfo.readAll();
char low;
char high;
for(int i=0;i<WavFileHeader.nDataLength;i+=2){
high=gbry.at(i+1);
low=gbry.at(i);
wavData[i/2]=(high<<4)|low;
}
写入时的转换