为了避免让您厌烦一堆代码,我将在下面对其进行总结。
在应用委托(delegate)中,我创建了一个 nsspeechrecognizer 设置它的委托(delegate),添加命令,然后开始监听。
语音识别器会在第一时间识别命令并继续,只要我不阻止它听。
一旦我通过调用 stoplistening 停止语音识别器,就会进行后续调用以开始收听,但不会再次识别之前识别过的命令。
我已确认命令数组保持不变。这是一种“每个命令只工作一次”类型的东西。
再次识别命令的唯一方法是终止 speech recognizercore.broker 进程。重新启动我的应用程序不会执行此操作。
这不是 el cap 的问题。有没有人在 Sierra 遇到过这样的怪事。
Let speechRecognizer = NSSpeechRecognizer()
speechRecognizer.delegate = self
speechRecognizer.listenInBackgroundOnly = false
speechRecognizer.commands = cmdArray
speechRecognizer.startListening()
在direcognize命令委托(delegate)中
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 编译的
最佳答案
虽然我没有解决这个问题。我能够通过将所有命令从“为 (firstAndLastName) 做某事”缩短为“为 (昵称) 做某事”
来解决这个问题这样解决问题是不合逻辑的。我在 Xcode 中输入和输出的“经纪人”现在向我暗示 nsspeechrecognizer 可能正在“分级”识别。
关于swift - OSX Sierra Nsspeechrecognizer 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39802182/