我試圖在textview中簡化語音框架的使用。我可以基於輸入文本視圖,啓動代碼或其他操作輕鬆啓動語音識別過程。但是,我也想在沒有用戶接觸的情況下結束語音識別。我一直無法在Speech框架中找到任何內容來表明有可用的方法來執行此操作。我已經制定了一種方法來完成它,方法是定義一個詞作爲停止轉錄的觸發器,然後從轉錄中刪除該詞。它確實有效,但用戶當然不會說這個詞。有沒有更好的方法來處理這個概念? iOS的10,斯威夫特3時,Xcode 8.2.1在Swift3中停止識別而不停用詞
這裏是代號爲recognitionTask子集:
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
您需要定義何時要停止識別,是否要在開始後立即停止識別?那麼啓動它有什麼意義?或者你想讓它在一段時間之後停下來嗎?超時應該有幫助。 –
我想在用戶說出指定的單詞時停止。在上面的代碼中,當用戶說「關係」時,它停止。然後關係從文本中刪除。沒有我的任何代碼,用戶可以說「逗號」並得到一個逗號。用戶可以說「問號」並獲得一個問號。我找不到一個停用詞的參考。 – user2698617
你嘗試過使用NSTimer嗎? – Devang