Остановить распознавание речи, когда пользователь закончит разговор

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