我正在使用SFSpeechRecognizer
正常工作,但当录制开始时在后台继续,那时候来电应用程序崩溃了。
我正在使用此代码
AVAudioSession *session = [AVAudioSession sharedInstance];
NSError *error = nil;
[session setCategory:AVAudioSessionCategoryPlayAndRecord error:&error];
[session setMode:AVAudioUnitTypeMixer error:&error];
AVAudioFormat *format = [inputNode outputFormatForBus:0];
[inputNode removeTapOnBus:0];
if (inputNode != nil)
{
[inputNode installTapOnBus: 0 bufferSize: 8192 format: format block: ^(AVAudioPCMBuffer *buf, AVAudioTime *when)
{
[recognitionRequest appendAudioPCMBuffer:buf];
}];
}
[audioEngine prepare];
错误由xcode生成。
failed: '!pri' (enable 1, outf< 2 ch, 0 Hz, Float32, non-inter> inf< 1 ch, 44100 Hz, Float32>)
[central] 54: ERROR: [0x1af844c40] >avae> AVAudioIONodeImpl.mm:883: SetOutputFormat: required condition is false: IsFormatSampleRateAndChannelCountValid(hwFormat)
答案 0 :(得分:0)
您必须响应应用程序中断以防止崩溃。 例如:包括来电等中断,
中断开始后 保存状态和上下文 更新用户界面
中断结束后 恢复状态和上下文 如果适当,请重新激活音频会话 更新用户界面
请参阅链接以获取更多信息Audio Session Programming Guide
例如,
AVAudioSession *session=[AVAudioSession sharedInstance];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleInterruption:)
name:AVAudioSessionInterruptionNotification
object:session];
- (void)handleInterruption:(NSNotification *)notification{}
一旦你处理了这个特殊的用例,你就应该好好去。