一:前言
刚毕业不久,接到的第一个项目就是音频采集。
要求在树莓派Linux系统上用QT进行音频采集,然后实时编码发送给window上的一个程序。
完成项目期间搜集了许多相关资料,苦于网上信息太过零散,大多都是存成文件传输,几乎没有实时性相关的完整的流程代码。FAAC编码器相关的资料也寥寥无几,在使用期间踩了不少坑。
因此在这里分享一下自己项目中的一些要点和部分代码,以及一些注意事项。可能代码比较稚嫩,有什么问题希望大佬指点。
二:音频采集的流程图如下:
三:具体代码
因为本次只讲采集,所以自己写了一个QT采集的代码,为了更好理解,文件不包含FAAC编码。编码将在下次博客中加入。
下面程序能实现实时采集PCM的数据,并存到文件中。
定义了一个DataPool内存空间,用于存放音频数据。如果存满了,从首地址开始将新数据覆盖原来数据。在槽函数中,一边从设备读取数据存到DataPool,一边从DataPool拿来写入文件。
其实想写文件完全没必要这么复杂,也可以这么操作:
QFile inputFile; //创建QFile文件句柄
inputFile.setFileName("/home/pi/DeskTop/New.Record/PCM 16000 16.PCM"); //设置文件存储位置
inputFile.open(QIODevice::WriteOnly | QIODevice::Truncate); //以只写的形式打开。
audioInput->start(&inputFile);
然后运行,就能开始启动录音并直接写到文件里,连槽函数都用不到,和下面程序功能完全一样!
下面这么做的意义,是因为后续音频编码要从DataPool不断取数据,干脆在这里提前贴上,让大家更好地理解槽函数内的操作。
.h 头文件
/*本程序实现简单的QT音频录音并实时