1

コールバックからのコールバックのスタンプを調べた場合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 秒後に不要なコールバックが追加されます。

resultnilこの最後のコールバック用です。

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

シャットダウンに失敗しているプロセスがあるように見えるので、コメントアウトされたコードがたくさんありますが、それを理解できません。

完全なコードはこちらです。

何が問題なのか誰にもわかりますか?

4

1 に答える 1