AVAudioEngine导致iOS 13上的AUGraphParser::InitializeActiveNodesInInputChain错误

AVAudioEngine导致iOS 13上的AUGraphParser::InitializeActiveNodesInInputChain错误,ios,objective-c,audiokit,Ios,Objective C,Audiokit,我正在使用SFSpeechRecognizer,并注意到iOS>=13上显示了此错误 这是我启动识别过程的代码: -(void)开始记录:(BOOL)collectPartialResults{ n错误*错误; AVAudioSession*audioSession=[AVAudioSession sharedInstance]; [audioSession setCategory:AvaudioSessionCategory播放和记录错误:&错误]; [audioSession设置模式:Ava

我正在使用
SFSpeechRecognizer
,并注意到iOS>=13上显示了此错误

这是我启动识别过程的代码:

-(void)开始记录:(BOOL)collectPartialResults{
n错误*错误;
AVAudioSession*audioSession=[AVAudioSession sharedInstance];
[audioSession setCategory:AvaudioSessionCategory播放和记录错误:&错误];
[audioSession设置模式:AvaudioSessionMode测量错误:&错误];
[audioSession setActive:是错误:&错误];
AVAudioInputNode*inputNode=\u audioEngine.inputNode;
_recognitionRequest=[SFSpeechAudioBufferRecognitionRequest新建];
_recognitionRequest.shouldReportPartialResults=collectPartialResults;
_识别任务=[\u内部识别器识别任务WithRequest:\u识别请求结果处理程序:^(SFSpeechRecognitionResult*\u可空结果,NSError*\u可空错误){
// ...
}];
AVAudioFormat*格式=[inputNode outputFormatForBus:0];
@试一试{
[inputNode installTapOnBus:0 bufferSize:1024格式:格式块:^(AVAudioPCMBuffer*\u非空缓冲区,AVAudioTime*\u非空时){
[_recognitionrequestappendaudiopcmbuffer:buffer];
}];
}
@捕获(NSException*异常){
NSLog(@“%@”,exception.userInfo);
[self-sendStartRecordingErrorMessage:[NSString stringWithFormat:@“%@”,exception.userInfo]];
返回;
}
N错误*启动器错误;
[_AudioEngineStartAndReturnError:&startError];
如果(启动器错误!=零){
[self-sendStartRecordingErrorMessage:[NSString stringWithFormat:@“%@”,startError.userInfo]];
}
}
这会运行一两次,但最终会导致此错误:

AVAEInternal.h:109   [AVAudioEngineGraph.mm:1397:Initialize: (err = AUGraphParser::InitializeActiveNodesInInputChain(ThisGraph, *GetInputNode())): error -10851
由此行引起:
[\u audioEngine startAndReturnError:&startError]

我不知道这个错误是什么意思。我的代码几乎与相同

我尝试过以下几种方法:

  • 使用
    outputFormatForBus
    而不是
    inputFormatForBus
    installTapOnBus
  • 使用不同的
    audioSession
    模式(
    AVAudioSessionModeVoicePrompt
  • 在开始重新编码过程之前调用
    [audioEngine reset]

    • 我也有同样的问题。对我来说,解决办法是每次录音都使用一台新的AVAudioEngine

      在您的示例中:

      - (void)startRecording:(BOOL)collectPartialResults {
        _audioEngine = [[AVAudioEngine alloc] init];
      
        // ...
      }
      

      你能给我看一下整个过程的确切代码吗?现在它给了我一个非常明确的错误:+[AFAggregator logDictationFailedWithError:]错误域=kAFAssistantErrorDomain代码=209“(null)”对不起,不能共享我的代码。但是
      kAFAssistantErrorDomain
      看起来像是
      Speech
      框架的一部分,而不是
      AVFoundation
      的一部分。所以这可能是一个无关的错误。我做了一些发现-似乎你不应该开始录制,除非上一个没有返回最终结果。如果我这样做,我不会遇到这个错误。