コールバックからのコールバックのスタンプを調べた場合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" )
}
シャットダウンに失敗しているプロセスがあるように見えるので、コメントアウトされたコードがたくさんありますが、それを理解できません。
完全なコードはこちらです。
何が問題なのか誰にもわかりますか?