作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试简化Textview中语音框架的使用。我可以通过基于输入textview的代码,启动代码或其他操作轻松地启动语音识别过程。但是,我也想在没有用户触摸的情况下结束语音识别。我无法在Speech框架中找到任何东西来指示有可用的方法来执行此操作。我通过定义一个单词作为停止抄写的触发器,然后从抄录中删除该单词的方式,精心设计了一种方法。它确实有效,但是用户当然不能说这个单词。有没有更好的方法来处理这个概念? iOS 10,Swift 3,Xcode 8.2.1
这是识别任务的代码子集:
private var bufferedString = String()
private var stopWord = "myStopWord"
recognitionRequest.shouldReportPartialResults = true
let startText = self.sayTextView.text
bufferedString = ""
recognitionTask = speechRecognizer?.recognitionTask(with: recognitionRequest, resultHandler: { (result, error) in
var finished = false
if let result = result {
self.bufferedString = startText! + result.bestTranscription.formattedString
self.sayTextView.text = self.bufferedString
finished = result.isFinal
}//if let result
//for testing
self.stopWord = "Relationship"
//for testing
if self.bufferedString.lowercased().contains(self.stopWord.lowercased()) {
print("buffered string contains \(self.stopWord)")
if let stopWordRange = self.bufferedString.lowercased().range(of: self.stopWord.lowercased()) {
self.bufferedString.replaceSubrange(stopWordRange, with: "")
self.sayTextView.text = self.bufferedString
}//if let
self.stopRecording(self)
}//if contains - look for stopWord
if error != nil || finished {
self.audioEngine.stop()
inputNode.removeTap(onBus: 0)
self.recognitionRequest = nil
self.recognitionTask = nil
self.startRecordingButton.isEnabled = true
}//if error
})//recognitionTask resultHandler
最佳答案
当用户停止按预期讲话时,isFinal标志似乎没有变为真。我猜这是Apple的通缉行为,因为“用户停止通话”事件是未定义的事件。
我相信实现目标的最简单方法是:
recognitionTask
中获得新转录时,
关于ios - 在Swift3中停止识别而无需停止词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42262491/
我是一名优秀的程序员,十分优秀!