语音识别在iOS上出错

8 speech-recognition objective-c ios siri sfspeechrecognizer

我正在研究iOS上的语音识别,但每次调用方法[_recognitionRequest endAudio]时,它总是在recognitionTaskWithRequest中出错:消息在底部.

-(void) stopRecording {
if (_disableSpeechSW == YES) {
    return;
}
if (_isAuthorization == NO) {
    return;
}

NSLog(@"stopRecording");

if ([_audioEngine isRunning]) {
    [_audioEngine stop];
    [_recognitionRequest endAudio];
}
Run Code Online (Sandbox Code Playgroud)

}

-(void) startRecording {
..........
[_speechRecognizer recognitionTaskWithRequest:_recognitionRequest
                   resultHandler:^(SFSpeechRecognitionResult *result,NSError *error){
  if (error != nil ) {
     NSLog(@"%@",[error description]);
  }
  else {
   ..........
  }
}];}
Run Code Online (Sandbox Code Playgroud)

[实用程序] + [AFAggregator logDictationFailedWithError:]错误域= kAFAssistantErrorDomain代码= 203"重试"UserInfo = {NSLocalizedDescription =重试,NSUnderlyingError = 0x17424c690 {错误域= SiriSpeechErrorDomain代码= 1"(null)"}}

San*_* SM 7

有关siri语音限制的更多说明,请参阅此文章:iOS 10的语音识别限制

Use my function below to stop speech recognization. Hope its works.

-(void)stopRecording{

    dispatch_async(dispatch_get_main_queue(), ^{

        if(audioEngine.isRunning){
            [inputNode removeTapOnBus:0];
            [inputNode reset];
            [audioEngine stop];
            [recognitionRequest endAudio];
            [recognitionTask cancel];
            recognitionTask = nil;
            recognitionRequest = nil;
        }
    });
}
Run Code Online (Sandbox Code Playgroud)


小智 4

我发现“endAudio”不允许从recognitionTaskWithRequest块外部调用,如果您直接调用方法“[self stopRecording]”,那么该块将立即响应错误“kAFAssistantErrorDomain Code=203”。

\n\n

这是我的代码中带有 stopRecord 的第 4 部分

\n\n

1和2没问题

\n\n

3 和 4 错误\n\xe3\x80\x80

\n\n

1.从块 \xe2\x86\x92 检测到语音 \xe2\x86\x92 withVoiceControl \xe2\x86\x92 stopRecord \xe2\x86\x92 ok

\n\n

2.from块错误\xe2\x86\x92 stopRecord \xe2\x86\x92 startRecord \xe2\x86\x92 ok

\n\n

3.按钮点击 \xe2\x86\x92 停止记录 \xe2\x86\x92 kAFAssistantErrorDomain Code=203

\n\n

4.定时器40s \xe2\x86\x92 stopRecord \xe2\x86\x92 startRecord \xe2\x86\x92 kAFAssistantErrorDomain Code=203

\n

  • 那么,如果我需要从外部 recognizeTaskWithRequest 调用 .endAudio (例如在 viewDidDisappear() 中),替代方案是什么? (3认同)