0

我不会用一堆代码让你厌烦,我会在下面总结一下。

在应用程序委托中,我创建了一个 nsspeechrecognizer 设置它的委托,添加命令,然后开始监听。

语音识别器第一次识别命令并继续,只要我不阻止它听。

一旦我通过调用 stoplistening 来停止语音识别器,就会进行后续调用以开始侦听,但不会再次识别以前识别器的命令。

我已经确认命令数组保持不变。这是一种“每个命令都工作一次”类型的东西。

再次识别命令的唯一方法是终止语音识别器核心代理进程。重新启动我的应用程序不会这样做。

这不是 el cap 的问题。有任何人在 Sierra 遇到过这样的怪事。

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

虽然我没有解决这个问题。我能够通过将所有命令缩短为“为(昵称)做某事”从“为(firstAndLastName)做某事”来解决这个问题

这样解决问题是不合逻辑的。我在 Xcode 中放置和输出的“代理”现在向我暗示 nsspeechrecognizer 可能是“分级”识别。

于 2016-10-04T07:12:49.877 回答