2017-01-02 8 views
12

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

+0

Я понимаю, что вам не нужно обрабатывать «когда пользователь заканчивает говорить». Вы должны прочитать руководство SiriKit: https://developer.apple.com/library/content/documentation/Intents/Conceptual/SiriIntegrationGuide/ResolvingandHandlingIntents.html#//apple_ref/doc/uid/TP40016875-CH5-SW1. В основном SiriKit дает вам «намерение» с данными, собранными из речи пользователя, и вам нужно только обрабатывать намерение и выполнять свои собственные операции. – volatilevar

+1

Вопрос задает вопрос о API распознавания речи, а не SiriKit. – nathan

+1

Любая удача? Я борюсь с этим сам – alhadhrami

ответ

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 
}