Cortana API 是否可用于桌面应用程序?
Are Cortana APIs available for desktop applications?
我想在 Windows 10 上使用新的 Cortana 引擎开发一个 Windows 应用程序。
不幸的是,据我所知,它似乎只适用于 Windows Phone 8.1 项目(例如,我没有找到访问 Windows.Media.SpeechRecognition 来自不同类型 Visual Studio 项目的命名空间)。
我也找不到好的 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();
}
}
严格来说,Cortana API 是 Windows.ApplicationModel.VoiceCommands
namespace 中的 API。这些不适用于经典 ("Desktop") 应用程序,但可用于 Windows 10 上的通用 Windows 应用程序。经典应用程序无法使用 API 的原因是因为它们依赖于概念例如不适用于经典应用的后台任务和应用标识。
Windows.Media.SpeechRecognition
namespace中的类型也不适用于经典应用程序,但我不确定那里有什么限制。
注意:如 所述,您可以让这些类型在桌面应用程序中工作,但目前并未明确支持。
如果您只想在 .NET 应用程序中进行语音识别,可以使用 System.Speech.Recognition
namespace,它使用相同的底层技术。
因此,尽管 Peter Torr 关于 Cortana(Windows.ApplicationModel.VoiceCommands API)的观点是正确的,但新的语音识别 WinRT APIs (Windows.Media.SpeechRecognition) 可用于一个经典的 C# 应用程序,如果你愿意使用 WinRT Interop 库。
我在 this answer to a stack overflow question 中详细介绍了如何设置,尽管提出该问题的人在复制我在本地工作的内容时遇到了一些麻烦。
您可以通过像调用新的 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&HideFile=false[扩展名]
我想在 Windows 10 上使用新的 Cortana 引擎开发一个 Windows 应用程序。
不幸的是,据我所知,它似乎只适用于 Windows Phone 8.1 项目(例如,我没有找到访问 Windows.Media.SpeechRecognition 来自不同类型 Visual Studio 项目的命名空间)。
我也找不到好的 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();
}
}
严格来说,Cortana API 是 Windows.ApplicationModel.VoiceCommands
namespace 中的 API。这些不适用于经典 ("Desktop") 应用程序,但可用于 Windows 10 上的通用 Windows 应用程序。经典应用程序无法使用 API 的原因是因为它们依赖于概念例如不适用于经典应用的后台任务和应用标识。
Windows.Media.SpeechRecognition
namespace中的类型也不适用于经典应用程序,但我不确定那里有什么限制。
注意:如
如果您只想在 .NET 应用程序中进行语音识别,可以使用 System.Speech.Recognition
namespace,它使用相同的底层技术。
因此,尽管 Peter Torr 关于 Cortana(Windows.ApplicationModel.VoiceCommands API)的观点是正确的,但新的语音识别 WinRT APIs (Windows.Media.SpeechRecognition) 可用于一个经典的 C# 应用程序,如果你愿意使用 WinRT Interop 库。
我在 this answer to a stack overflow question 中详细介绍了如何设置,尽管提出该问题的人在复制我在本地工作的内容时遇到了一些麻烦。
您可以通过像调用新的 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&HideFile=false[扩展名]