Je tente de simplifier l'utilisation de la structure de la parole dans une vue de texte. Je peux facilement démarrer le processus de reconnaissance vocale avec du code basé sur l'entrée dans le texte, le code de démarrage ou d'autres actions. Cependant, je veux également mettre fin à la reconnaissance vocale sans les touches de l'utilisateur. Je n'ai pas été en mesure de trouver quelque chose dans le cadre de discours pour indiquer qu'il existe des méthodes disponibles pour le faire. J'ai conçu un moyen de l'accomplir en définissant un mot pour être le déclencheur pour arrêter la transcription, puis pour enlever le mot de la transcription. Cela fonctionne, mais bien sûr, l'utilisateur ne peut jamais prononcer ce mot. Y a-t-il une meilleure façon de gérer ce concept? iOS 10, Swift 3, Xcode 8.2.1Arrêter la reconnaissance dans Swift3 sans mot d'arrêt
Voici le sous-ensemble du code pour le 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
Vous devez définir quand vous voulez arrêter la reconnaissance, voulez-vous l'arrêter juste après le démarrage? Quel est le sens de commencer alors? Ou voulez-vous l'arrêter après un certain temps? Timeout devrait aider alors. –
Je veux arrêter lorsque l'utilisateur dit un mot spécifié. Dans le code ci-dessus, lorsque l'utilisateur dit "Relation" il s'arrête. La relation est ensuite supprimée du texte. Sans aucun code de ma part, l'utilisateur peut dire "virgule" et obtenir une virgule. L'utilisateur peut dire "point d'interrogation" et obtenir un point d'interrogation. Je ne trouve pas de référence à un mot d'arrêt. – user2698617
Avez-vous essayé d'utiliser un NSTimer? – Devang