首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift SFSpeechRecognizer不工作两次

Swift SFSpeechRecognizer不工作两次
EN

Stack Overflow用户
提问于 2017-02-03 09:10:23
回答 1查看 1.1K关注 0票数 2

这是我第一次在Swift中使用SFSpeechRecognizer,其中一项功能不起作用。当我按下按钮audioButtonPressed,它似乎开始识别很好,并再次按它停止它。当我再次按下它重新开始识别时,识别不起作用,留下了一个空白的文本视图。我该怎么做?

这是我的密码

代码语言:javascript
复制
@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")
    }
}

当我第一次按音频按钮时,开始录音被调用,它工作得很完美,再按它,停止录音被调用并且工作正常,但是再按一次并不能使识别重新开始.想法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-03 09:17:49

我认为在释放recognitionTask.cancel()函数中的任务之前,您缺少了stopRecording。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42020544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档