2017-01-02 10 views
12

W jaki sposób Siri jest w stanie określić, kiedy skończę mówić. Powodem, dla którego chciałbym wiedzieć, jest to, że chciałbym wprowadzić podobną funkcjonalność z Apple Speech Recognition API z moją aplikacją. Czy jest to wykonalne, czy też jedynym sposobem, aby wiedzieć, kiedy użytkownik przestał mówić, jest wejście użytkownika?Zatrzymaj rozpoznawanie mowy po zakończeniu rozmowy przez użytkownika

+0

mojego zrozumienia jest to, że nie trzeba obsłużyć "gdy użytkownik zakończy mówienia". Powinieneś przeczytać przewodnik SiriKit tutaj: https://developer.apple.com/library/content/documentation/Intents/Conceptual/SiriIntegrationGuide/ResolvingandHandlingIntents.html#//apple_ref/doc/uid/TP40016875-CH5-SW1. Zasadniczo SiriKit daje "zamiar" z danymi zebranymi z mowy użytkownika, a ty musisz tylko postępować zgodnie z intencją i wykonywać własne operacje. – volatilevar

+1

Pytanie dotyczy interfejsu API Speech Recognition API, a nie SiriKit. – nathan

+1

Masz szczęście? Sam się z tym zmagam. – alhadhrami

Odpowiedz

1

Możesz użyć timera, miałem ten sam problem i nie mogłem go rozwiązać za pomocą eleganckiej metody.

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() 
      } 
     } 
    }) 
} 

aw SFSpeechRecognitionTaskDelegate

public func speechRecognitionTask(_ task: SFSpeechRecognitionTask, didHypothesizeTranscription transcription: SFTranscription) { 
    let result = transcription.formattedString 
    lastString = result 
} 
Powiązane problemy