不使用时是否停用iOS音频会话?

不使用时是否停用iOS音频会话?,ios,objective-c,core-audio,remoteio,Ios,Objective C,Core Audio,Remoteio,我有一个iOS应用程序,可以在指定的时间段内录制音频片段,对音频进行分析,返回结果,然后基本处于非活动状态,直到用户想要再次录制 该应用程序的音频配置与的类似,并利用RemoteI/O音频单元和音频会话服务。应用程序当前在初始启动期间设置AudioSessionSetActive(true),然后启动远程I/O。音频会话和音频单元在应用程序的整个生命周期内保持运行 因此,我的问题是,由于应用程序实际上只在相对较短的时间内(15-60秒)使用麦克风,我是否应该通过AudioSessionSetAc

我有一个iOS应用程序,可以在指定的时间段内录制音频片段,对音频进行分析,返回结果,然后基本处于非活动状态,直到用户想要再次录制

该应用程序的音频配置与的类似,并利用RemoteI/O音频单元和音频会话服务。应用程序当前在初始启动期间设置
AudioSessionSetActive(true)
,然后启动远程I/O。音频会话和音频单元在应用程序的整个生命周期内保持运行

因此,我的问题是,由于应用程序实际上只在相对较短的时间内(15-60秒)使用麦克风,我是否应该通过
AudioSessionSetActive(false)
在未被积极使用时停用音频会话

我试过只在录制过程中运行音频单元和音频会话,在录制生物时开始,在录制完成时停止,虽然它在模拟器上按预期工作,但在物理设备上运行时会崩溃。以下是错误:

*** Terminating app due to uncaught exception 'NSRangeException', reason: '-[__NSCFArray objectAtIndex:]: index (0) beyond bounds (0)'
*** First throw call stack:
(0x2e4baf4b 0x3884a6af 0x2e4bae8d 0x2e4054b3 0xb2e67 0xb420d 0x2ddd5ee5 0x2ddd5b1f 0x2ddd6283 0x2ddd6163 0x2ddd6045 0x2ddd5fc7 0x2ddd57a5 0x2e4859df 0x2e48597b 0x2e48414f 0x2e3eec27 0x2e3eea0b 0x330cd283 0x30c92049 0xa1d6f 0x38d52ab7)
libc++abi.dylib: terminating with uncaught exception of type NSException
下面是我如何开始/停止录音:

- (void)startRecording
{
    CheckError(AudioSessionSetActive(true), "Couldn't set audio session active\n");

    if (![self unitIsRunning]) {
        CheckError(AudioOutputUnitStart([self audioUnit]), "Couldn't start unit");
        [self setUnitIsRunning:YES];
    }


}

- (void)stopRecording
{
    if ([self unitIsRunning]) {
        CheckError(AudioOutputUnitStop([self audioUnit]), "Couldn't stop unit");
        [self setUnitIsRunning:NO];
    }

    // if I comment out the following line, and keep the audio session running
    // throughout the lifetime of the app, everything works fine
    CheckError(AudioSessionSetActive(false), "Couldn't set audio session inactive\n");
}
显然,为了简洁起见,我省略了在单元运行时发生的音频渲染回调以及在初始启动时完成的音频会话/音频单元的配置,但同样,这与aurioTouch2中所做的非常接近。这个错误似乎是由于将音频会话设置为非活动状态,但我似乎不知道为什么


我很难找到苹果是否建议运行相同的音频会话,即使应用程序实际上没有做任何事情。会话应该在应用程序的生命周期内保持还是基于需要使用?有什么想法吗?

您确定代码的其他部分不会引发异常吗?您是否尝试添加异常断点?谢谢magma,你是对的,我的音频会话AudioRouteChange回调中的一些代码导致了错误。当音频会话停止时,我没想到会有人呼叫它!