我正在使用 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
安装TapOnBus
, - 使用不同的
audioSession
模式(AVAudioSessionModeVoicePrompt
), - 在开始重新编码过程之前调用
[audioEngine reset]
最佳答案
我遇到了同样的问题。对我来说,解决方案是为每个录音使用一个新的 AVAudioEngine。
在你的例子中:
- (void)startRecording:(BOOL)collectPartialResults {
_audioEngine = [[AVAudioEngine alloc] init];
// ...
}
关于ios - AVAudioEngine 在 iOS 13 上导致 AUGraphParser::InitializeActiveNodesInInputChain 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59238035/