2015-08-10 15 views
11

Chcę opracować aplikację Windows na Windows 10 przy użyciu nowego silnika Cortana.Czy interfejsy API Cortany są dostępne dla aplikacji komputerowych?

Niestety, o ile wiem, wydaje się, że jest dostępny tylko w projekcie Windows Phone 8.1 (na przykład, nie znalazłem sposobu na dostęp do przestrzeni nazw Windows.Media.SpeechRecognition z innego typu Visual Studio projekt).

Również nie byłem w stanie znaleźć dobrej dokumentacji API, tylko niektóre bardzo proste przykłady.

Edit:

podstawie Peter Torr odpowiedź Mam trochę kodu. Byłem w stanie rozpoznać słowo, ale silnik wydaje się walczyć, gdy próbował rozpoznać proste słowa, takie jak "Cześć", a Cortana rozpoznała to z powodzeniem.

Czy robię coś nie tak?

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

Odpowiedz

16

Ściśle mówiąc, API Cortana są te, w Windows.ApplicationModel.VoiceCommands namespace. Nie są one dostępne dla aplikacji klasycznych ("Desktop"), ale są dostępne dla aplikacji Universal Windows w systemie Windows 10. Powodem, dla którego aplikacje klasyczne nie mogą korzystać z interfejsów API, jest to, że opierają się na takich pojęciach, jak zadania w tle i tożsamość aplikacji, które nie są dostępne. t odnoszą się do klasycznych aplikacji.

Typy w Windows.Media.SpeechRecognition namespace są również niedostępne dla aplikacji klasycznych, ale nie jestem pewien, jakie są ograniczenia.

Uwaga: Jak wspomniano w dokumencie @Andrew Pilley, możesz mieć możliwość uruchamiania tych typów w aplikacji na komputer, ale obecnie nie jest to obsługiwane w sposób jawny.

Jeśli chcesz tylko rozpoznawania mowy w aplikacji .NET, możesz użyć System.Speech.Recognition namespace, która korzysta z tej samej podstawowej technologii.

+0

Witam, bardzo dziękuję za odpowiedź. Próbowałem utworzyć projekt biblioteki klas, ale na liście dostępnych odniesień nie ma zestawu Windows.Media (lub podobnego). Jedyne pliki DLL o tej nazwie istnieją w ścieżce takiej jak C: \ Windows \ WinSxS \ amd64_microsoft-windows-runtime-windows-media_31bf3856ad364e35_10.0.10240.16384_none_4f69ddc0692a98bf i są to biblioteki COM. Szczerze mówiąc, czuję się nieco zdezorientowany.Spodziewałbym się, że biblioteka dll będzie częścią .Net Framework (lub Windows Sdk) i będzie biblioteką C#. – simoneL

+0

Myślę, że przegapiłeś tę część odpowiedzi: "Typy w przestrzeni nazw Windows.Media.SpeechRecognition są również niedostępne dla klasycznych aplikacji". Myślę, że musisz spojrzeć na System.Speech.Recognition. –

+0

Tak, Brendan, masz rację, źle odczytałem. Następnie powinienem pójść spać wcześniej :) Przy okazji napisałem kod na podstawie odpowiedzi Petera i umieściłem go w oryginalnym pytaniu. Osiągnąłem pewne rozpoznawanie mowy, ale wciąż nie jest wystarczająco dobre. – simoneL

3

Podczas gdy Peter Torr ma rację co do Cortany (API Windows.ApplicationModel.VoiceCommands), nowe funkcje API WinRT do rozpoznawania mowy (Windows.Media.SpeechRecognition) mogą być używane w klasycznej aplikacji C#, jeśli chcesz korzystać z bibliotek WinRT Interop.

Mam szczegółowe informacje, jak ustawić to w this answer to a stack overflow question, mimo że osoba, która zadała to pytanie, ma problemy z odtworzeniem tego, co udało mi się wykonać lokalnie.

+0

Och, to wygląda obiecująco! Spróbuję go zaimplementować tak szybko, jak tylko będę mógł :) – simoneL

+1

Uważaj - interfejsy API mogą "działać", ale nie są jawnie testowane pod kątem użycia na pulpicie (nie ma "DualApiPartitionAttribute" lub "MuseAttribute" w WinMD). –

0

Możesz aktywować Cortanę "WIN + C" zdarzenie po prostu nazywając to "uri" jak nowy proces(), nawet gdy ustawienie jest wyłączone.

ms-Cortana: // StartMode = Reactive & ListeningMode = True & QuerySource = VoiceShortcutKey & pozycyjny = stacjonarny & SpeechTextInputHeight = 40 & ColorPrevalenceEnabled = true & PersonaOnlySupported = true & TaskbarOrientation = 3 & SearchBoxInTaskbar = false & AppsUseLightTheme = false & HideFileExtensions = false

Powiązane problemy