【问题标题】:Are Cortana APIs available for desktop applications?Cortana API 是否可用于桌面应用程序?
【发布时间】:2015-11-03 00:15:13
【问题描述】:

我想使用新的 Cortana 引擎在 Windows 10 上开发一个 Windows 应用程序。

不幸的是,据我所知,它似乎仅适用于 Windows Phone 8.1 项目(例如,我没有找到从不同类型的 Visual Studio 项目访问 Windows.Media.SpeechRecognition 命名空间的方法)。

我也找不到好的 API 文档,只有一些非常简单的例子。

编辑:

根据 Peter Torr 的回答,我编写了一些代码。我已经能够识别一些单词,但是当它试图识别一些简单的单词(例如“Hello”)时,引擎似乎在挣扎,而 Cortana 成功识别了它。

我做错了吗?

public static class SpeechSynthetizerManager
{
    private static readonly SpeechSynthesizer synth = new SpeechSynthesizer();
    private static readonly SpeechRecognitionEngine speechRecognitionEngine = new SpeechRecognitionEngine();

    public static event EventHandler<SpeechRecognizedEventArgs> SpeechRecognized
    {
        add { speechRecognitionEngine.SpeechRecognized += value; }
        remove { speechRecognitionEngine.SpeechRecognized -= value; }
    }

    public static event EventHandler<RecognizeCompletedEventArgs> RecognizeCompleted
    {
        add { speechRecognitionEngine.RecognizeCompleted += value; }
        remove { speechRecognitionEngine.RecognizeCompleted -= value; }
    }

    static SpeechSynthetizerManager()
    {
        synth.SelectVoiceByHints(VoiceGender.Female);

        speechRecognitionEngine.LoadGrammar(new DictationGrammar());

        speechRecognitionEngine.SetInputToDefaultAudioDevice();
    }

    public static void Speak(string message)
    {
        synth.Speak(message);
    }

    public static void Listen()
    {
        speechRecognitionEngine.RecognizeAsync();
    }
}

【问题讨论】:

    标签: c# desktop-application windows-10 cortana


    【解决方案1】:

    严格来说,Cortana API 是 Windows.ApplicationModel.VoiceCommands namespace 中的 API。这些不适用于经典(“桌面”)应用程序,但适用于 Windows 10 上的通用 Windows 应用程序。经典应用程序无法使用 API 的原因是它们依赖于后台任务和应用程序标识等概念t 适用于经典应用。

    Windows.Media.SpeechRecognition namespace 中的类型也不适用于 Classic 应用,但我不确定有什么限制。

    注意:正如@Andrew Pilley 所提到的,您也许可以让这些类型在桌面应用程序中工作,但目前并未明确支持。

    如果您只想在 .NET 应用程序中进行语音识别,您可以使用 System.Speech.Recognition namespace,它使用相同的底层技术。

    【讨论】:

    • 您好,非常感谢您的回复。我尝试创建一个类库项目,但在可用引用列表中没有 Windows.Media(或类似)程序集。唯一具有该名称的 DLL 存在于 C:\Windows\WinSxS\amd64_microsoft-windows-runtime-windows-media_31bf3856ad364e35_10.0.10240.16384_none_4f69ddc0692a98bf 等路径中,它们是 COM dll。老实说,我感到有些困惑。我本来希望 dll 成为 .Net Framework(或 windows Sdk)的一部分并成为 C# 库。
    • 我认为您错过了这部分答案:“Windows.Media.SpeechRecognition 命名空间中的类型也对经典应用程序不可用”。我认为您需要查看 System.Speech.Recognition。
    • 是的,Brendan,你是对的,我看错了。接下来我应该早点睡觉 :) 顺便说一句,我已经根据 Peter 的回复编写了一些代码,并将其包含在原始问题中。我实现了一些语音识别,但仍然不够好。
    • 我最终开发了一个新的 Windows 通用应用程序,它似乎最终使用了 Cortana 语音识别引擎。这是我遵循的示例:projectoxford.ai/doc/speech/Get-Started/windows
    【解决方案2】:

    因此,虽然 Peter Torr 对 Cortana(Windows.ApplicationModel.VoiceCommands API)的看法是正确的,但如果您愿意的话,新的语音识别 WinRT API (Windows.Media.SpeechRecognition) 可以在经典 C# 应用程序中使用使用 WinRT 互操作库。

    我已经在this answer to a stack overflow question 中详细说明了如何设置它,尽管提出这个问题的人在复制我在本地工作的内容时遇到了一些问题。

    【讨论】:

    • 哦,看起来很有希望!我会尽快实现它:)
    • 小心 - API 可能“工作”,但它们没有明确测试桌面使用(在 WinMD 中没有 DualApiPartitionAttributeMuseAttribute)。
    【解决方案3】:

    您可以通过像 new Process() 一样调用此“uri”来激活 Cortana 的“WIN+C”事件,即使设置已关闭。

    ms-cortana://StartMode=Reactive&ListeningMode=True&QuerySource=VoiceShortcutKey&Positioner=desktop&SpeechTextInputHeight=40&ColorPrevalenceEnabled=true&PersonaOnlySupported=true&TaskbarOrientation=3&SearchBoxInTaskbar=false&AppsUseLightTheme=false&HideFileExtensions=false

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-24
      • 2023-04-05
      • 1970-01-01
      • 2011-08-09
      • 2010-12-21
      • 2011-05-01
      相关资源
      最近更新 更多