不使用时禁用iOS音频会话?

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

该应用的音频配置与aurioTouch2类似,并使用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 activen");

    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 inactiven");
}

很显然,我忽略了单元运行时发生的音频渲染回调,以及为简洁起见而在初次启动时完成的音频会话/音频单元的配置,但这与aurioTouch2中所做的非常接近。 该错误似乎是由于将音频会话设置为非活动状态,但我似乎无法弄清楚原因。

我很难找到Apple是否建议运行相同的音频会话,即使应用程序实际上没有做任何事情。 该会议是否应该在申请的整个期间或需要使用基础? 有什么想法吗?

链接地址: http://www.djcxy.com/p/79029.html

上一篇: Deactivate iOS audio session when not in use?

下一篇: Core Audio (Audio Units) audio session and MPVolumeView