Если я проверял штампы на обратные вызовы от обратного вызова SFSpeechRecognizer
recognitionTask
(в macOS):
recognitionTask = speechRecognizer.recognitionTask( with: recognitionRequest )
{ result, error in
// if more than two seconds elapsed since the last update, we send a notification
NSLog( "speechRecognizer.recognitionTask callback" )
:
... Я наблюдаю:
:
2019-11-08 14:51:00.35 ... speechRecognizer.recognitionTask callback
2019-11-08 14:51:00.45 ... speechRecognizer.recognitionTask callback
2019-11-08 14:51:32.31 ... speechRecognizer.recognitionTask callback
т.е. это дополнительный нежелательный обратный вызов примерно через 30 секунд после моего последнего высказывания.
result
равен nil
для этого последнего обратного вызова.
Тот факт, что он близок к 30 секундам, подсказывает мне, что этопредставляющий максимальный тайм-аут.
Я не ожидаю тайм-аут, потому что я вручную отключил свой сеанс (около отметки 5 с, нажав кнопку):
@objc
func stopRecording()
{
print( "stopRecording()" )
// Instructs the task to stop accepting new audio (e.g. stop recording) but complete processing on audio already buffered.
// This has no effect on URL-based recognition requests, which effectively buffer the entire file immediately.
recognitionTask?.finish()
// Indicate that the audio source is finished and no more audio will be appended
recognitionRequest?.endAudio()
//self.recognitionRequest = nil
audioEngine.stop()
audioEngine.inputNode.removeTap( onBus: 0 )
//recognitionTask?.cancel()
//self.recognitionTask = nil
self.timer?.invalidate()
print( "stopRecording() DONE" )
}
Там много закомментированного кода, как мне кажется, есть какой-то процесс, который мне не удается закрыть, но я не могу понять это.
Полный код здесь .
Кто-нибудь может увидеть, что идет не так?