我正在开发使用Qt在C ++中实时处理音频的软件。我需要最小化要求。
定义一个临时缓冲区40ms,以采样频率Fs = 8000Hz启动我们的设备,每320个样本进入一个名为Data Processing()的功能。
我们的想法是拥有一个全局缓冲区,用于存储最后记录的10个样本,80000个样本。 在每次迭代中,此缓冲区消除了最初的320个样本,最后循环了320个新样本。因此,缓冲区被更新,用户可以观察记录信号的实时图形表示。
起初我想过为这个部署使用QVector(相当于std::vector
但对Qt而言),因此我们减少了几行代码的过程
int NUM_POINTS=320;
DatosTemporales.erase(DatosTemporales.begin(),DatosTemporales.begin()+NUM_POINTS);
DatosTemporales+= (DatosNuevos); // Datos Nuevos con un tamaño de NUM_POINTS
在每次迭代中,除了释放一些位置外,我们还创建了80000个样本的向量,因此需要一些处理时间。选择的另一种方法是使用* double,迭代循环:
for(int i=0;i<80000;i++){
if(i<80000-NUM_POINTS){
aux=DatosTemporales[i];
DatosTemporales[i+NUM_POINTS]=aux;
}else{
DatosTemporales[i]=DatosNuevos[i-NUN_POINTS];
}
}
失败。我认为最好的方法是使用动态内存。通过指针实现此过程。谁能让我知道如何实现它?
答案 0 :(得分:1)
听起来你正在寻找的是循环缓冲区。
https://www.google.com/search?q=qcircularbuffer
https://qt.gitorious.org/qt/qtbase/merge_requests/60
看起来你只需要头文件,你应该好好去。
可在此处找到Qt数据集中已有的类似工具:
http://doc.qt.io/qt-5/qcontiguouscache.html#details
使用这些系统的优势在于它们不需要动态内存,只需要移动头部和尾部指针。
希望有所帮助。