ios speech recognition Error Domain=kAFAssistantErrorDomain Code=216 “(null)”

前端 未结 4 2003
死守一世寂寞
死守一世寂寞 2020-12-28 19:59

Basically I am learning ios speech recognition module following this tutorial: https://medium.com/ios-os-x-development/speech-recognition-with-swift-in-ios-10-50d5f4e59c48

4条回答
  •  抹茶落季
    2020-12-28 20:43

    I had the same problem whilst following the same (excellent) tutorial, even when using the example code on GitHub. To solve it, I had to do two things:

    Firstly, add request.endAudio() at the start of the code to stop recording in the startButtonTapped action. This marks the end of the recording. I see you've already done that in your sample code.

    Secondly, in the recordAndRecognizeSpeech function, when 'recognitionTask' is started, if no speech was detected then 'result' will be nil and the error case is triggered. So, I tested for result != nil before attempting to assign the result.

    So, the code for those two functions looks as follows: 1. Updated startButtonTapped:

    @IBAction func startButtonTapped(_ sender: UIButton) {
        if isRecording {
    
            request.endAudio() // Added line to mark end of recording
            audioEngine.stop()
    
            if let node = audioEngine.inputNode {
                node.removeTap(onBus: 0)
            }
            recognitionTask?.cancel()
    
            isRecording = false
            startButton.backgroundColor = UIColor.gray
    
        } else {
    
            self.recordAndRecognizeSpeech()
            isRecording = true
            startButton.backgroundColor = UIColor.red
        }
    }
    

    And 2. Update within recordAndRecognizeSpeech from the recognitionTask = ... line:

        recognitionTask = speechRecognizer?.recognitionTask(with: request, resultHandler: { (result, error) in
            if result != nil { // check to see if result is empty (i.e. no speech found)
                if let result = result {
                    let bestString = result.bestTranscription.formattedString
                    self.detectedTextLabel.text = bestString
    
                    var lastString: String = ""
                    for segment in result.bestTranscription.segments {
                        let indexTo = bestString.index(bestString.startIndex, offsetBy: segment.substringRange.location)
                        lastString = bestString.substring(from: indexTo)
                    }
                    self.checkForColoursSaid(resultString: lastString)
    
                } else if let error = error {
                    self.sendAlert(message: "There has been a speech recognition error")
                    print(error)
                }
            }
    
        }) 
    

    I hope that helps you.

提交回复
热议问题