您的位置:首页 > 编程语言 > Qt开发

Qt读取wav文件处理音频数据时的格式转换问题

2020-02-17 03:16 591 查看

在读取文件时用Qfile file.read先读取表头信息再读取音频数据

表头信息读取参考了https://www.geek-share.com/detail/2687192582.html

数据滤波处理时使用计算出滤波参数后,在线性卷积时发现总会卡死到双重for循环中(下面是已经修改后的)

[code]        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型,所以需要进行一下转换

读取时的转换:

[code]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;
}

写入时的转换

[code]QByteArray byArr;
char low;
char high;
for(int i=0;i<WavFileHeader.nDataLength;i+=2){
low=wavData[i/2]%16;
high=wavData[i/2]/16;
byArr[i]=low;
byArr[i+1]=high;
}
file.write(byArr);

在转换时要注意high与low的顺序

疑问:使用以上方式将刚读取的wavData直接再重新写入后文件会有很大的噪声,是因为什么?感觉数据传输中没有丢失吧,

希望有大佬可以告知一下原因!

  • 点赞
  • 收藏
  • 分享
  • 文章举报
liu_lxs 发布了5 篇原创文章 · 获赞 0 · 访问量 92 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: