语音识别:在快速开始到结束时崩溃?

时间:2018-11-24 06:54:05

标签: ios swift speech-recognition speech

我已经实现了语音识别功能,可以在命令的基础上操作应用程序。

但是,当用户尝试连续一段时间(不到1分钟)开始结束语音识别时,应用程序崩溃并显示错误消息:- libc ++ abi.dylib:以NSException类型的未捕获异常终止 strong>

仅当用户快速执行此操作时,应用程序才会崩溃。

如果正常尝试从头到尾,则可以正常工作。

无法找出原因。

**

  • 代码段:-

**

开始讲话:- ///开始语音识别

InputStream inputStream = FileHandle.class.getResourceAsStream(path);

*

*

func startListening() {

   if AVAudioSession.sharedInstance().category == AVAudioSessionCategorySoloAmbient
    {
            let audioSession = AVAudioSession.sharedInstance()
            do {
                try audioSession.setCategory(AVAudioSessionCategoryRecord)
                try audioSession.setMode(AVAudioSessionModeMeasurement)
                try audioSession.setActive(true, with: .notifyOthersOnDeactivation)
            } catch {
                print("audioSession properties weren't set because of an error.")
            }
        }

            audioEngine = AVAudioEngine()

            if !(audioEngine?.isRunning)! {
                startRecording()
                //print("start listening............")
            }
        }

停止语音识别:- ///结束语音识别

/// Start recording/listening
private func startRecording() {
    guard let audio_engine = self.audioEngine else {return}

    if recognitionTask != nil {
        recognitionTask?.cancel()
        recognitionTask = nil
    }

    recognitionRequest = SFSpeechAudioBufferRecognitionRequest()
    let inputNode = audio_engine.inputNode


    guard let recognitionRequest = recognitionRequest else {
       // fatalError("Unable to create an SFSpeechAudioBufferRecognitionRequest object")
        print("fatalError : Unable to create an SFSpeechAudioBufferRecognitionRequest object")
        return

    }
    recognitionRequest.shouldReportPartialResults = true
    recognitionTask = speechRecognizer?.recognitionTask(with: recognitionRequest, resultHandler: { (result, error) in
        var isFinal = false
        if result != nil {
            if let transcript = result?.bestTranscription.formattedString{
                self.speechResponse!(transcript,.authorized,nil)
            }
            isFinal = (result?.isFinal)!
        }
        if error != nil || isFinal {
            audio_engine.stop()
            inputNode.removeTap(onBus: 0)
            self.recognitionRequest = nil
            self.recognitionTask = nil
            if self.isContinueListening == true{
                self.startRecording()
            }
        }
    })

    let recordingFormat = inputNode.outputFormat(forBus: 0)
    inputNode.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) { (buffer, when) in
        self.recognitionRequest?.append(buffer)
    }
    audio_engine.prepare()
    do {
        try audio_engine.start()
    } catch {
        print("audioEngine couldn't start because of an error")
    }

}

即使试图拖延但没有运气

谢谢!

0 个答案:

没有答案