在iOS Swift 4中使用语音工具包时由于未捕获的应用程序崩溃而终止应用程序

时间:2018-11-15 08:59:41

标签: swift text-to-speech

我正在使用Siri语音工具包,并且在使用它并单击按钮几次时,它将终止,并显示错误消息作为标题。 我使用的是单个按钮,当第一次在此处单击它作为我们的声音,然后再次单击该按钮时,则停止收听这是主要功能。

`func startRecording() {
        messageField.text = ""
        if recognitionTask != nil {
            recognitionTask?.cancel()
            recognitionTask = nil
        }
        let audioSession = AVAudioSession.sharedInstance()
        do {
            try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord,mode: AVAudioSessionModeDefault, options: .defaultToSpeaker)
            try audioSession.setMode(AVAudioSessionModeMeasurement)
            try audioSession.setActive(true, with: .notifyOthersOnDeactivation)
        } catch {
            print("audioSession properties weren't set because of an error.")
        }
        recognitionRequest = SFSpeechAudioBufferRecognitionRequest()
        let inputNode = audioEngine.inputNode
        guard let recognitionRequest = recognitionRequest else {
            fatalError("Unable to create an SFSpeechAudioBufferRecognitionRequest object")
        }
        recognitionRequest.shouldReportPartialResults = true
        recognitionTask = speechRecognizer.recognitionTask(with: recognitionRequest, resultHandler: { (result, error) in
            var isFinal = false
            if result != nil {
                self.messageField.text = result?.bestTranscription.formattedString
                //   self.textViewShouldEndEditing(self.messageField)
                isFinal = (result?.isFinal)!
            }
            if error != nil || isFinal {
                self.audioEngine.stop()
                self.audioEngine.inputNode.removeTap(onBus: 0)

                self.recognitionRequest = nil
                self.recognitionTask = nil
                // self.microphoneButton.isEnabled = true
            }
        })
        let recordingFormat = inputNode.outputFormat(forBus: 0)
        inputNode.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) { (buffer, when) in
            self.recognitionRequest?.append(buffer)
        }
        audioEngine.prepare()

        do {
            try audioEngine.start()
        } catch {
            print("audioEngine couldn't start because of an error.")
        }
        messageField.text = "Say something, I'm listening!"
    }`
`

请帮帮我, 谢谢。

0 个答案:

没有答案
相关问题