たくさんのコードであなたを退屈させるのではなく、以下に要約します。
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 を使用してコンパイルされます。