Доступны ли API Cortana для настольных приложений?

Я хочу разработать приложение Windows на Windows 10 с помощью нового движка Cortana.

к сожалению, насколько я знаю, он доступен только в проекте Windows Phone 8.1 (например, я не нашел способ доступа к Windows.Сми.Пространство имен SpeechRecognition из другого типа проекта Visual Studio).

также я не смог найти хорошую документацию API, только некоторые очень простые примеры.

изменить:

на основе Питер Торр ответ я написал какой-то код. Я смог распознать какое-то слово, но двигатель, похоже, борется, когда он пытался распознать некоторые простые слова, такие как "привет", в то время как Кортана распознала его успешно.

Я делаю что-то не так?

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();
    }
}

3 ответов


строго говоря, API Cortana-это те, которые находятся в Windows.ApplicationModel.VoiceCommands пространство имен. Они недоступны для классических ("настольных") приложений, но доступны для универсальных приложений Windows в Windows 10. Причина, по которой классические приложения не могут использовать API, заключается в том, что они полагаются на такие понятия, как фоновые задачи и идентификатор приложения, которые не применяются к классическим приложениям.

типы Windows.Media.SpeechRecognition пространство имен также недоступны для классических приложений, но я не уверен, что есть ограничения.

Примечание: As @Andrew Pilley упоминает, вы можете получить эти типы для работы в настольном приложении, но это явно не поддерживается на данный момент.

Если вы просто хотите распознавание речи в приложении .NET, вы можете использовать System.Speech.Recognition пространство имен, который использует ту же базовую технологию.


Итак, в то время как Питер Торр прав насчет Кортаны (Windows.ApplicationModel.VoiceCommands API), новое распознавание речи WinRT API (Windows.Сми.SpeechRecognition) может использоваться в классическом приложении C#, если вы хотите использовать библиотеки взаимодействия WinRT.

Я подробно рассказал, как настроить это в этот ответ на вопрос переполнения стека, хотя у человека, который задал этот вопрос, возникли проблемы с воспроизведением того, что я получил для работы на местном уровне.


вы можете активировать событие "WIN+C" Кортаны, просто вызвав этот " uri " как новый процесс(), даже если параметр выключен.

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