C# Cortana API是否可用于桌面应用程序?

C# Cortana API是否可用于桌面应用程序?,c#,desktop-application,windows-10,cortana,C#,Desktop Application,Windows 10,Cortana,我想使用新的Cortana引擎在Windows10上开发一个Windows应用程序 不幸的是,据我所知,它似乎只在Windows Phone 8.1项目上可用(例如,我没有找到从其他类型的Visual Studio项目访问Windows.Media.SpeechRecognition命名空间的方法) 我也找不到好的API文档,只有一些非常简单的例子 编辑: 根据彼得·托尔的回答,我写了一些代码。我已经能够识别一些单词,但当引擎试图识别一些简单的单词,如“Hello”,而Cortana成功识别它时

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

不幸的是,据我所知,它似乎只在Windows Phone 8.1项目上可用(例如,我没有找到从其他类型的Visual Studio项目访问Windows.Media.SpeechRecognition命名空间的方法)

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

编辑:

根据彼得·托尔的回答,我写了一些代码。我已经能够识别一些单词,但当引擎试图识别一些简单的单词,如“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();
    }
}
公共静态类SpeechSyntheticizerManager
{
专用静态只读SpeechSynthesizer synth=新SpeechSynthesizer();
私有静态只读SpeechRecognitionEngine SpeechRecognitionEngine=新SpeechRecognitionEngine();
已识别公共静态事件事件处理程序SpeechHandler
{
添加{speechRecognitionEngine.SpeechRecognized+=value;}
删除{speechRecognitionEngine.SpeechRecognited-=value;}
}
公共静态事件事件处理程序已识别完成
{
添加{speechRecognitionEngine.RecognizeCompleted+=value;}
删除{speechRecognitionEngine.RecognizeCompleted-=value;}
}
静态SpeechSynthetizerManager()
{
synth.selectVoiceByHits(VoiceGender.Femal);
加载语法(新的听写语法());
speechRecognitionEngine.setInputOdeFaultAudioDevice();
}
公共静态void Speak(字符串消息)
{
synth.Speak(消息);
}
公共静态void Listen()
{
speechRecognitionEngine.RecognizeAsync();
}
}

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

中的类型对经典应用程序也不可用,但我不确定有什么限制

注意:如前所述,您可能可以在桌面应用程序中使用这些类型,但目前还没有明确支持


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

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


我已经在中详细介绍了如何设置,尽管提出该问题的人在复制我在本地工作的内容时遇到了一些问题。

即使设置已关闭,您也可以通过像调用新进程()一样调用此“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

您好,非常感谢您的回复。我试图创建类库项目,但在可用引用列表中没有Windows.Media(或类似)程序集。路径C:\Windows\WinSxS\amd64\U microsoft-Windows-runtime-Windows-media\U 31bf3856ad364e35\U 10.0.10240.16384\U none\U 4f69ddc0692a98bf中仅存在具有该名称的DLL,它们是COM DLL。老实说,我觉得有点困惑。我本来希望dll是.Net Framework(或windows Sdk)的一部分,并且是一个C#库。我想你错过了答案的这一部分:“windows.Media.SpeechRecognition命名空间中的类型对经典应用程序也不可用”。我想你们需要看看系统语音识别是的Brendan,你们说得对,我看错了。接下来我应该早点睡觉:)顺便说一句,我已经根据Peter的回答编写了一些代码,并将其包含在原始问题中。我实现了一些语音识别,但仍然不够好。我最终开发了一个新的Windows通用应用程序,它似乎最终使用了Cortana语音识别引擎。这是我遵循的示例:哦,看起来很有希望!我会尽快实现它:)小心-API可能“工作”,但它们没有针对桌面使用进行明确测试(它没有WinMD中的
DualApiPartitionAttribute
MuseAttribute
)。