我正在尝试在文本视图中简化语音框架的使用。我可以使用基于输入文本视图、启动代码或其他操作的代码轻松启动语音识别过程。但是,我也想在没有用户触摸的情况下结束语音识别。我无法在语音框架中找到任何东西来表明有可用的方法来执行此操作。我精心设计了一种方法来完成它,方法是将一个单词定义为停止转录的触发器,然后从转录中删除该单词。它确实有效,但当然用户永远不会说出那个词。有没有更好的方法来处理这个概念?iOS 10、斯威夫特 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