2012-03-12 69 views
1

我知道这是一个很难回答的问题,因为我有时会看到它,有时没有。我使用AVAudioRecorder在我的应用程序中录制音频。它可以运行良好。但有时,当我浏览到其他应用程序和这些应用程序的使用麦克风功能,并回到我的应用程序,我的记录功能无法记录,所有记录文件的长度为0。AVAudioRecorder:后其他记录的应用程序无法录制

我调试后,我发现: [记录prepareToRecord]返回TRUE(此方法来创建记录文件 - 例如文件的.caf) [录音机记录]总是返回FALSE(这是问题)

我不知道为什么[录音机记录]返回FALSE。有没有人以前看到这个问题,可以告诉我如何解决这个问题?

非常感谢。

回答

3

听起来像是你需要激活AVAudioSession当你的应用程序变得活跃

+0

能否请你解释如何做到这一点? 'AudioSessionSetActive(真);'没有帮助! – saiy2k 2013-08-09 13:03:23

0

一旦松动记录,则必须重新启动声音再次录制,你必须在前台做到这一点。您可以捕获音频中断事件,以便中断和中断结束。但目前存在缺陷,而且很多人没有收到结束事件。

AVCaptureSession   *captureSession; 
....... 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(audioInterruptionEnded) name:AVCaptureSessionInterruptionEndedNotification object:captureSession]; 
[captureSession addObserver: self forKeyPath:@"running" options:0x3 context:nil]; 
[captureSession addObserver: self forKeyPath:@"interrupted" options:0x3 context:nil]; 

有两种捕捉音频的方法。使用更高级别的AVCapture会议,或下一级AudioQueue,但都被第一款的限制。

- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 
{ 
    if ([keyPath isEqualToString:@"interrupted"]) 
    { 
      // try restart here if in foreground 
      // post local notification if in background to bring to foreground and then restart 
    } 
}