【发布时间】:2014-07-03 09:19:29
【问题描述】:
我的应用使用 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);
在有选择地运行循环将缓冲区写入磁盘之前,存储缓冲区的最佳容器是什么……?释放内存的最佳方法是什么?
【问题讨论】:
-
写入磁盘不应该对硬件要求很高,更不用说导致崩溃了。 ExtAudioFileWriteAsyc() 非常有效。您的代码导致崩溃。你能分享更多你的代码吗?例如您是否正在调用 ExtAudioFileDispose() 将任何挂起的写入刷新到磁盘?
-
崩溃是在持续写入数小时后发生的,主要发生在资源有限的旧硬件上。我测试了一些途径(并得到了 Apple 支持的一些帮助)。它触发了“内核恐慌”,这是非常不寻常的,并且与特定代码无关,而是与一段时间后无法应对的硬件相关联。是的,我使用 ExtAudioFileDispose。我通过减少写入(暂停)所花费的时间来大大减少崩溃的发生率,并且在没有写入的情况下运行时没有崩溃,因此得出结论是写入是问题所在。
标签: ios xcode core-audio