SFSpeechRecognizer kAFAssistantErrorDomain Code=203 "重试"

Posted

技术标签:

【中文标题】SFSpeechRecognizer kAFAssistantErrorDomain Code=203 "重试"【英文标题】:SFSpeechRecognizer kAFAssistantErrorDomain Code=203 "Retry" 【发布时间】:2018-01-08 03:35:42 【问题描述】:

我使用SFSpeechRecognizer,基本上是为了工作。

1.但有时会出现以下错误。 主要是在我没有执行avStop()之前。

[实用程序] +[AFAggregator logDictationFailedWithError:] 错误 Domain=kAFAssistantErrorDomain Code=203 "重试" UserInfo=NSLocalizedDescription=重试,NSUnderlyingError=0x1c464b880 错误域=SiriSpeechErrorDomain Code=1 "(null)"

2.并且完全无法在后台工作,会产生如下错误。

[Utility] +[AFAggregator logDictationFailedWithError:] 错误域=kAFAssistantErrorDomain Code=1700 "(null)"

class MySpeech:NSObject
 private var iosRecognizer: SFSpeechRecognizer?
 private var iosRequest: SFSpeechAudioBufferRecognitionRequest?
 private var iosTask: SFSpeechRecognitionTask?
 private let iosAVE = AVAudioEngine()
 private let avSession = AVAudioSession.sharedInstance()

 func avINIT()
    try? avSession.setCategory(AVAudioSessionCategoryPlayAndRecord, with: [.allowBluetooth])
    try? avSession.setMode(AVAudioSessionModeMeasurement)
    try? avSession.setActive(true, with: .notifyOthersOnDeactivation)
 
 func switchHFP()
    do
        //try avSession.setActive(false)
        try avSession.setCategory(AVAudioSessionCategoryPlayAndRecord, with: [.allowBluetooth])
        try avSession.setActive(true, with: .notifyOthersOnDeactivation)
     catch 
        debugPrint("HFP error: \(error.localizedDescription)")
    

 func avStart(_ sLNG:NSString)
        if let iosTask = iosTask 
            iosTask.cancel()
            self.iosTask = nil
        
        iosRecognizer=SFSpeechRecognizer(locale: Locale(identifier:sLNG as String))!
        iosRequest = SFSpeechAudioBufferRecognitionRequest()

        guard let inputNode = iosAVE.inputNode else  fatalError("Audio engine has no input node") 

        guard let recognitionRequest = iosRequest else  fatalError("Unable to created a SFSpeechAudioBufferRecognitionRequest object") 

        recognitionRequest.shouldReportPartialResults = false

        iosTask = iosRecognizer?.recognitionTask(with: recognitionRequest)  result, error in
            if let result = result 
                if result.isFinal 
                    self.iosAVE.stop()
                    inputNode.removeTap(onBus: 0)
                    self.iosRequest = nil
                    self.iosTask = nil

                    self.textView.text = result.bestTranscription.formattedString
                
            else if error != nil
                self.iosAVE.stop()
                inputNode.removeTap(onBus: 0)
                self.iosRequest = nil
                self.iosTask = nil

                self.textView.text = error?.localizedDescription ?? "(NULL)"
            
        

        let recordingFormat = iosAVE.inputNode?.outputFormat(forBus: 0)

        inputNode.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat)  (buffer: AVAudioPCMBuffer, when: AVAudioTime) in
            self.iosRequest?.append(buffer)
        

        iosAVE.prepare()
        do
            try iosAVE.start()
         catch  print("Error: Start Record") 
    
 

 func avStop()
        iosTask?.finish()
        iosRequest?.endAudio()
 

【问题讨论】:

【参考方案1】:

kAFAssistantErrorDomain 203 是当您完成或取消SFSpeechRecognitionTaskSFSpeechRecognizer 无法检测到任何结果。也许你调用了两次avStart(_),导致取消第一个任务而没有结果。

关于 kAFAssistantErrorDomain 1700 直到现在我还不知道是什么导致了这个问题。但只发生在我越狱的 iPhone 身上。

【讨论】:

为什么“完成”被删除了?即使我完成了请求,我也会收到此错误。 我的错。我写的第一个答案包括取消或完成识别任务的代码,但原始代码已经有finish()的功能,所以我编辑它只包括cancel()。也许我应该在括号内重写它。更糟糕的是,我意识到我的答案很糟糕,我混淆了变量和方法。我不知道我在想什么。我会改正的。 我在合法电话上看到了错误 1700。但不确定是什么原因造成的。 这个答案是猜测还是有任何官方文档支持它? 纯属猜测。但是不知道有没有官方文档,至少我没有找到。

以上是关于SFSpeechRecognizer kAFAssistantErrorDomain Code=203 "重试"的主要内容,如果未能解决你的问题,请参考以下文章

iOS 应用程序上的 SFSpeechRecognizer(Siri 转录)超时错误

在 AVSpeechUtterance 之后使用 SFSpeechRecognizer 时出现 AVAudioSession 问题

从 SFSpeechRecognizer 获取语音幅度

Swift SFSpeechRecognizer 附加现有的 UITextView 内容

SFSpeechRecognizer kAFAssistantErrorDomain Code=203 "重试"

Swift 4 - XCTAssertThrowsError 失败:没有抛出错误