检查口头命令是否已启用?

时间:2010-11-11 14:57:54

标签: objective-c cocoa macos macos-carbon speech-recognition

有没有办法检查用户是否在系统偏好设置中启用了语音识别(口头命令)? (Mac OS X)。如果用户启用了它,我想支持其他语音命令。不幸的是NSSpeechRecognizer中没有任何方法来检查这个,我似乎也找不到任何碳函数来检查它。

其中一个问题是,每当我实例化NSSpeechRecognizer时,圆形语音命令窗口(其上带有麦克风的窗口)似乎会间歇性地出现。此外,它经常会冻结我的应用程序大约半秒左右,同时创建对象(可能它正在启动语音识别服务)。

实质上,如果语音识别器尚未运行和使用,我不想启动它。但如果用户主动使用语音识别器,我想为它提供额外的支持。

提前致谢。

2 个答案:

答案 0 :(得分:1)

我也不知道公共API;但圆形麦克风窗口由SpeakableItems.app控制,至少在OS X 10.6上。您可以检查进程列表和/或正在运行的应用程序列表,看看它是否存在。

答案 1 :(得分:1)

受@ Yuji的回答启发,看起来唯一的方法是检查语音识别服务器是否正在运行。这是代码片段,以防任何人也需要它。

+(BOOL) speakableItemsEnabled {
    NSString* speechServerBundleName = @"com.apple.speech.recognitionserver";
    NSArray* apps = [NSRunningApplication runningApplicationsWithBundleIdentifier:speechServerBundleName];
    NSRunningApplication* speechServerApp = [apps lastObject];
    return speechServerApp && !speechServerApp.terminated;
}

希望这不会破坏10.7“狮子”。