Как Сири может определить, когда я закончу разговор. Причина, по которой я хотел бы знать, - это то, что я хотел бы реализовать аналогичную функциональность с API распознавания речи Apple с моим приложением. Является ли это выполнимым или является единственным способом узнать, когда пользователь прекратил говорить, через ввод пользователя?Остановить распознавание речи, когда пользователь закончил говорить
12
A
ответ
1
Вы можете использовать таймер, у меня была такая же проблема, и я не мог решить его с помощью элегантного метода.
fileprivate var timer:Timer?
func startRecordingTimer() {
lastString = ""
createTimerTimer(4)
}
func stopRecordingTimer() {
timer?.invalidate()
timer = nil
}
fileprivate func whileRecordingTimer() {
createTimerTimer(2)
}
fileprivate var lastString = ""
func createTimerTimer(_ interval:Double) {
OperationQueue.main.addOperation({[unowned self] in
self.timer?.invalidate()
self.timer = Timer.scheduledTimer(withTimeInterval: interval, repeats: false) { (_) in
self.timer?.invalidate()
if(self.lastString.characters.count > 0){
//DO SOMETHING
}else{
self.whileRecordingTimer()
}
}
})
}
и SFSpeechRecognitionTaskDelegate
public func speechRecognitionTask(_ task: SFSpeechRecognitionTask, didHypothesizeTranscription transcription: SFTranscription) {
let result = transcription.formattedString
lastString = result
}
Я понимаю, что вам не нужно обрабатывать «когда пользователь заканчивает говорить». Вы должны прочитать руководство SiriKit: https://developer.apple.com/library/content/documentation/Intents/Conceptual/SiriIntegrationGuide/ResolvingandHandlingIntents.html#//apple_ref/doc/uid/TP40016875-CH5-SW1. В основном SiriKit дает вам «намерение» с данными, собранными из речи пользователя, и вам нужно только обрабатывать намерение и выполнять свои собственные операции. – volatilevar
Вопрос задает вопрос о API распознавания речи, а не SiriKit. – nathan
Любая удача? Я борюсь с этим сам – alhadhrami