2015-08-10 1 views
11

Я хочу разработать приложение Windows в Windows 10 с помощью нового движка Cortana.Доступны ли API-интерфейсы Cortana для настольных приложений?

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

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

Edit:

на основе Питер Торр ответ я написал код. Я смог распознать какое-то слово, но, похоже, двигатель работает, когда он пытался распознать некоторые простые слова типа «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(); 
    } 
} 

ответ

16

Строго говоря, интерфейсы Кортана являются те, в Windows.ApplicationModel.VoiceCommands namespace. Они недоступны для приложений Classic («Desktop»), но доступны для приложений Universal Windows в Windows 10. Причина, по которой приложения Classic не могут использовать API, заключается в том, что они полагаются на такие концепции, как «Фоновые задачи» и «Идентификация приложения», t применяются к приложениям Classic.

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

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

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

+0

Привет, большое спасибо за ваш ответ. Я попытался создать проект библиотеки классов, но в списке доступных ссылок нет сборки 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#. – simoneL

+0

Я думаю, вы пропустили эту часть ответа: «Типы в пространстве имен Windows.Media.SpeechRecognition также недоступны для классических приложений». Я думаю, вам нужно посмотреть System.Speech.Recognition. –

+0

Да, Брендан, ты прав, я неправильно понял. Далее я должен ложиться спать раньше :) Кстати, я написал код на основе ответа Питера и включил его в исходный вопрос. Я добился признания речи, но это все еще недостаточно. – simoneL

3

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

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

+0

О, это выглядит многообещающим! Я попытаюсь реализовать его, как только смогу :) – simoneL

+1

Будьте осторожны: API-интерфейсы могут «работать», но они явно не протестированы для использования на рабочем столе (у него нет «DualApiPartitionAttribute» или «MuseAttribute» в WinMD). –

0

Вы можете активировать событие «WIN + C» Cortana, просто называя это «uri», как новый Process(), даже если настройка отключена.

мс-Кортана: // StartMode = Реактивная & ListeningMode = True & QuerySource = VoiceShortcutKey & позиционер = & рабочего стола SpeechTextInputHeight = 40 & ColorPrevalenceEnabled = & истинно PersonaOnlySupported = истинно & TaskbarOrientation = 3 & SearchBoxInTaskbar = & ложно AppsUseLightTheme = & ложно HideFileExtensions = false

Смежные вопросы