阻止主线程的状态项(NSMenu阻止NSSpeechRecognizer检测声音)

时间:2012-10-26 20:46:21

标签: macos menu speech-recognition speech speech-to-text

我在NSMenu下面有一个NSStatusItem。我也有一个NSSpeechRecognizer。当NSMenu打开时,语音识别器无法正常工作。在我关闭菜单之前,它会不断显示它正在接收声音。即使菜单打开,我也需要它来正确检测声音。

即使菜单打开,如何让语音识别器检测到声音?它是否需要成为“第一响应者”并优先于菜单?

我尝试设置[speechRecognizer setListensInForegroundOnly: NO],而仍然无效。

如果您不理解,我非常乐意提供澄清。

以下是一些similar situations,但我还不完全明白。

1 个答案:

答案 0 :(得分:2)

问题很可能是菜单运行模态运行循环只要它是打开的(为了跟踪鼠标等...)这就阻碍了NSSpeechRecognizer的能力正常运作。

您可以通过调出菜单然后暂停调试器来确认。你可能会看到两个运行循环;正在运行模态循环的堆栈中的外部,正常,一个和一个更深。

一般来说,从用户交互的角度来看,这是一件奇怪的事情。弹出菜单的重点是为用户提供一些命令,这些命令将在选择相应的菜单项后完成。

如果你真的需要“点击这个东西并识别语音”,我会推荐一个按钮,可能会弹出一些用户界面,然后在不使用菜单的情况下与语音识别器进行交互?