Как Сири может определить, когда я закончу разговор. Причина, по которой я хотел бы знать, это то, что я хотел бы реализовать аналогичную функциональность с API Apple Speech Recognition API с моим приложением. Является ли это выполнимым или является единственным способом узнать, когда пользователь перестает говорить, это через пользовательский ввод?
Остановить распознавание речи, когда пользователь закончит разговор
Ответ 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
}