在iOS中的背景audio录制

我已经search了很多关于如何在后台录制audio的文档,并得出了在plist文件中指定“audio”的结论。 但是,由于iOS 4会在内存不足的情况下终止后台应用程序,因此在转换到后台时,我们还必须采取一些措施来减less内存使用量。 我们如何减less内存使用量?

另外,有没有人知道在iOS上的背景audio录制方法?

我取消选中Info.plist文件中的“应用程序不在后台运行”中的框,并添加了

<key> UIBackgroundModes </ key> < array> < string> audio</ string></ array> 

Info.plist 。 但是,只要按下“HOME”button,录制就会停止。

我们实现了什么样的callback来知道应用程序已经背景? 请指教。

以防其他人在这里寻找答案,我得到了我的工作,通过添加UIBackgroundModes数组到plist,添加“audio”作为项目0。

我退出所有的内存/控制器,就像退出应用程序一样,所以剩下的就是应用程序使用的缓冲区了(我已经分配了大约1MB的内存,尽pipe这样做让我有些紧张,但是它似乎已经工作了!)我认为降低保真度也会有所帮助,但似乎按原样工作。

在我的核心audio设置中,我不得不将缓冲区大小从1024更改为4096或显式设置缓冲区大小…我select后者作为延迟是一个问题。

 NSTimeInterval iobuffersize = (float)1024.0f/SAMPLE_RATE); sizeofdata = sizeof(iobuffersize); AudioSessionSetProperty(kAudioSessionProperty_PreferredHardwareIOBufferDuration, &sizeofdata, &iobuffersize); 

我也必须确保它没有通过不启用“不在后台运行”选项来终止应用程序,但是默认情况下这应该是closures的。

所以,我猜想我正在回答这个问题,因为对于其他人来说,它并没有太多的设置工作。

然而,我正在遇到蓝牙设置的问题,我想这是因为缓冲区大小再次改变,但不能找出这一个…只是得到-50 =通过recordingCallback呈现数据时的无效属性警告。 我猜这是频率/样本大小,但谁知道…会稍后看,但似乎背景现在的作品。

除了在plist文件中指定背景logging,我们可以实现applicationDidEnterBackground,它会告诉我们什么时候应用程序进入后台。 在这里,我们应该停止UI的任何更新,因为这消耗了更新定时器和均衡器的内存。

调用applicationWillEnterForeground将在应用程序返回到前台之前被调用,以便我们可以继续我们停止的任何事情。

录音然后发生在后台。 这也有助于实现一个中断监听器(这也可以在后台工作),这样你就不会丢失录音。