gpt4 book ai didi

ios - AVAudioEngine 在 iOS 13 上导致 AUGraphParser::InitializeActiveNodesInInputChain 错误

转载 作者:行者123 更新时间:2023-11-29 11:25:13 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com