【问题标题】:Checking whether spoken commands are enabled?检查是否启用了语音命令?
【发布时间】:2010-11-13 15:23:53
【问题描述】:

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

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

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

提前致谢。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 我在我的安装中找不到SpeakableItems.app,但是圆窗确实出现了。
    • 它深埋在操作系统内部,看看/System/Library/Speech/Recognizers/AppleSpeakableItems.SpeechRecognizer/Contents/Resources/。它出现在活动监视器中。
    【解决方案2】:

    受@Yuji 的回答启发,看来唯一的方法是检查语音识别服务器是否正在运行。这是代码sn-p,以防万一有人需要它。

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

    希望这不会在 10.7 "Lion" 中中断。

    【讨论】:

    • 好的。不过,这在某种程度上是从您的回答中得出的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 2018-03-31
    相关资源
    最近更新 更多