【问题标题】:Swift SFSpeechRecognizer not working twiceSwift SFSpeechRecognizer 不能工作两次
【发布时间】:2017-06-20 14:33:02
【问题描述】:

这是我第一次在 Swift 中使用 SFSpeechRecognizer,其中一个功能不起作用。当我按下按钮audioButtonPressed 时,它似乎开始识别正常,然后再次按下它会停止它。当我再次尝试按下它以再次开始识别时,识别不起作用并留下空白文本视图。我该怎么做?

这是我的代码

@IBAction func audioButtonPressed(_ sender: Any) {
    if isRecording {
        stopRecording()
        delegate?.speechRecognitionComplete(query: query)
        audioButton.backgroundColor = UIColor.red
        isRecording = false
    } else {
        startRecording()
        audioButton.backgroundColor = UIColor.green
        isRecording = true
    }
}

func stopRecording() {
    audioEngine.stop()
    audioEngine.inputNode?.removeTap(onBus: 0)
    recognitionRequest = nil
    recognitionTask = nil
}

func startRecording() {
    recognitionRequest = SFSpeechAudioBufferRecognitionRequest()
    guard let recognitionRequest = recognitionRequest else {
        return
    }
    recognitionRequest.shouldReportPartialResults = true
    recognitionTask = speechRecognizer?.recognitionTask(with: recognitionRequest, resultHandler: { (result, error) in
        var isFinal = false
        if result != nil {
            self.query = result?.bestTranscription.formattedString
            self.audioTextField.text = self.query
            isFinal = (result?.isFinal)!
        }
        if error != nil || isFinal {
            self.stopRecording()
        }
    })
    let audioSession = AVAudioSession.sharedInstance()
    do {
        try audioSession.setCategory(AVAudioSessionCategoryRecord)
        try audioSession.setMode(AVAudioSessionModeMeasurement)
        try audioSession.setActive(true, with: .notifyOthersOnDeactivation)
    } catch {
        print("the audio session isn't configured correctly")
    }
    let recordingFormat = audioEngine.inputNode?.outputFormat(forBus: 0)
    audioEngine.inputNode?.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) { (buffer, time) in
        self.recognitionRequest?.append(buffer)
    }
    audioEngine.prepare()
    do {
        try audioEngine.start()
        audioTextField.text = "How may I help you"
    } catch {
        print("audio engine failed to start")
    }
}

当我第一次按下音频按钮时,开始录制被调用并且它工作正常,再次按下它停止录制被调用并且工作正常,但是再次按下不会使识别再次开始......想法?

【问题讨论】:

  • 你的方法startRecording 在你第二次按下开始录制按钮时会被再次调用?

标签: ios swift speech-recognition text-to-speech


【解决方案1】:

我认为你在 stopRecording 函数中释放任务之前缺少recognitionTask.cancel()

【讨论】:

    猜你喜欢
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2011-12-02
    • 2019-05-31
    • 1970-01-01
    相关资源
    最近更新 更多