核心音频:如何在写入磁盘或删除之前将缓冲区存储在RAM中?

时间:2014-07-03 09:19:29

标签: ios xcode core-audio

我的应用程序使用Core Audio分析音频缓冲区,记录很长时间,但只向用户显示该音频的一些样本。到目前为止,我一直在将所有内容写入磁盘,然后选择性地删除文件但是,似乎写操作对硬件要求很高,如果使用太多,偶尔会触发崩溃。

我喜欢有办法避免写操作,除非必要,这可以通过在写入磁盘之前将音频缓冲区(比如说1分钟)存储在RAM中来完成,如果不需要则从内存中释放它们

任何人都可以建议最有效的方法吗?

renderErr = AudioUnitRender(rioUnit, ioActionFlags,
                                    inTimeStamp, bus1, inNumberFrames, THIS->bufferList);

Analysis of buffer....

OSStatus s;

s = ExtAudioFileWriteAsync(THIS->mAudioFileRef, inNumberFrames, THIS->bufferList);

在选择性地运行循环以将缓冲区写入磁盘之前,存储缓冲区的最佳容器是什么?什么是释放记忆的最佳方式?

1 个答案:

答案 0 :(得分:0)

使用大小为2646000 + 1或更大的样本数组的无锁循环队列或fifo可以在RAM中以44.1 ksps存储1分钟的单声道音频。大多数iOS设备在为队列或fifo分配6MB或更多内存时遇到问题。显示,分析或将此数据写入磁盘可以通过周期性轮询或置换链接计时器在另一个线程中完成(从循环队列尾部清空或FIFO)。音频单元停止后,可以释放用于此阵列的内存。