1、13年的时候做过一个网络摄像机的Mac客户端,当时就是用Qt做的,通过继承QIODevice,重写writeData来保存PCM音频数据,一切都正常。
2、现如今(17年)在Windows上也写一个同样的客户端,拿着以前音频采集代码移植过来,却发现直接保存的PCM数据不正常,全是噪音。这就郁闷了,难道Windows系统上有做什么特殊的处理吗?波形如下:
3、想破脑袋也没想到是什么原因,开始怀疑人生了,刚开始是用 FILE的fwrite接口来写文件的,于是尝试用QFile来写,看看有没有什么不一样的,意外的是,QFile写的PCM文件播放竟然是正常的。于是开始查阅Qt的相关源代码:QFile、QFileDevice、QIODevice,终于看到这么一段特别的,Windows与Linux的换行符是不一样的,这里有特殊处理,将 '\n' 替换成'\r\n':
4、既然发现了这个特点,那就我也把 '\n' 替换成'\r\n'试试咯,竟然还真正常了,只不过还是有小杂音,波形如下图,我们能看出波形中有一条条的竖线:
5、于是干脆把 '\n'只换成 '\r'试下,竟然真的正常了,这些小竖线都消失了。
6、就这么个换行符,把我整得快趴了。以后如果大家也有碰到类似的,建议直接将 '\n' 替换成 '\r' 试下。
7、以上全是自己的心得笔记,写得不好,大神勿喷。