0

たくさんのコードであなたを退屈させるのではなく、以下に要約します。

app delegate で、デリゲートを設定する nsspeechrecognizer を作成し、コマンドを追加してから、リッスンを開始します。

音声認識エンジンはコマンドを初めて認識し、聞き取りを停止しない限り続行します。

stoplistening を呼び出して音声認識エンジンを停止すると、その後、聞き取りを開始するための呼び出しが行われますが、以前に認識エンジンであったコマンドは 2 回認識されません。

コマンド配列が同じままであることを確認しました。「各コマンドは一度だけ機能する」タイプのものです。

コマンドを再び認識させる唯一の方法は、音声認識コア.ブローカー プロセスを強制終了することです。アプリを再起動しても、これは行われません。

これは el cap の問題ではありませんでした。シエラでこのような奇妙な経験をした人はいますか。

Let speechRecognizer = NSSpeechRecognizer()
speechRecognizer.delegate = self
speechRecognizer.listenInBackgroundOnly = false
speechRecognizer.commands = cmdArray
speechRecognizer.startListening()

didrecognize コマンドデリゲートで

If cmd== specificCommand {
     Print("heard")
     // commenting out the following line allows recognizer to continue functioning correctly
     speechRecognizer.stopListening()
}

別のメソッドを呼び出すと、リッスンが再開されます。コマンドは、startlistening が呼び出された後に認識されます..... 既に認識されているコマンドを除きます。

これは、Sierra マシンの Xcode 8 で swift 2.3 を使用してコンパイルされます。

4

1 に答える 1

1

私はこの問題を解決しませんでしたが。すべてのコマンドを「do something for (firstAndLastName)」から「do something for (nickname)」に短縮することで、この問題を回避できました。

問題がそのようなものによって解決されるのは非論理的です。私が Xcode に置いて出力した「ブローカー」は、nsspeechrecognizer が認識を「グレーディング」している可能性があることを示唆しています。

于 2016-10-04T07:12:49.877 に答える