音频处理时,有时需要将采集的PCM数据保存成文件,以供分析。
在保存PCM文件时,遇到了如下问题: 本机播放音乐,设置为混音模式,用dsound采集音频,然后保存采集到的PCM数据。
用Cool Edit Pro打开pcm文件, 结果发现保存的数据都是刺啦刺啦的声音。

pcm文件

放大后

再放大
发现数据是异常的。具体原因是什么呢?
后来发现是保存的时候,文件保存的模式不正确。
当前使用的模式为默认的文本模式:
FILE *fpOutputPCMFile = fopen(".\\output_t.pcm", "w+");
将以上代码中的w+修改为wb+:
FILE *fpOutputPCMFile2 = fopen(".\\output_a.pcm", "wb+");
再次采集音频数据, 音频正常。

正常音频数据
为什么会出现这个现象呢?
w+ 与 wb+的区别
可以发现,在文本模式下,以文本方式打开文件时,fwrite函数每碰到一个0x0A时,就在它的前面加入0x0D.其它内容不做添加操作。
采集音频时,同时以文本模式和二进制模式保存PCM数据,用BeyondCompare以16进制模式打开文件进行对比。

数据对比
