我正在使用SFSpeechRecognizer
,并注意到在iOS> = 13上显示此错误。
这是我开始识别过程的代码:
- (void)startRecording:(BOOL)collectPartialResults {
NSError *error;
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:&error];
[audioSession setMode:AVAudioSessionModeMeasurement error:&error];
[audioSession setActive:YES error:&error];
AVAudioInputNode *inputNode = _audioEngine.inputNode;
_recognitionRequest = [SFSpeechAudioBufferRecognitionRequest new];
_recognitionRequest.shouldReportPartialResults = collectPartialResults;
_recognitionTask = [_internalRecognizer recognitionTaskWithRequest:_recognitionRequest resultHandler:^(SFSpeechRecognitionResult * _Nullable result, NSError * _Nullable error) {
// ...
}];
AVAudioFormat *format = [inputNode outputFormatForBus:0];
@try {
[inputNode installTapOnBus:0 bufferSize:1024 format:format block:^(AVAudioPCMBuffer * _Nonnull buffer, AVAudioTime * _Nonnull when) {
[_recognitionRequest appendAudioPCMBuffer:buffer];
}];
}
@catch (NSException *exception) {
NSLog(@"%@", exception.userInfo);
[self sendStartRecordingErrorMessage:[NSString stringWithFormat:@"%@", exception.userInfo]];
return;
}
NSError *startError;
[_audioEngine startAndReturnError:&startError];
if (startError != nil) {
[self sendStartRecordingErrorMessage:[NSString stringWithFormat:@"%@", startError.userInfo]];
}
}
这可以工作一到两次,但最终会导致此错误:
AVAEInternal.h:109 [AVAudioEngineGraph.mm:1397:Initialize: (err = AUGraphParser::InitializeActiveNodesInInputChain(ThisGraph, *GetInputNode())): error -10851
由此行引起:[_audioEngine startAndReturnError:&startError];
我不知道这个错误是什么意思。我的代码与official example几乎相同。
我已经尝试了几件事,例如:
outputFormatForBus
代替inputFormatForBus
installTapOnBus
,audioSession
模式(AVAudioSessionModeVoicePrompt
),[audioEngine reset]
在您的示例中:
- (void)startRecording:(BOOL)collectPartialResults {
_audioEngine = [[AVAudioEngine alloc] init];
// ...
}