2015-08-10 7 views
11

Ich möchte eine Windows-Anwendung auf Windows 10 mit der neuen Cortana-Engine entwickeln.Sind Cortana-APIs für Desktop-Anwendungen verfügbar?

Leider, so weit ich weiß, scheint es nur für Windows Phone 8.1-Projekt verfügbar (zum Beispiel habe ich keine Möglichkeit gefunden, auf den Windows.Media.SpeechRecognition-Namespace von einem anderen Typ von Visual Studio zugreifen Projekt).

Auch konnte ich keine gute API-Dokumentation finden, nur einige sehr einfache Beispiele.

Edit:

Basierend auf Peter Torr Antwort habe ich schrieb einige Code. Ich konnte ein Wort erkennen, aber die Engine scheint zu kämpfen, als sie versuchte, einige einfache Wörter wie "Hallo" zu erkennen, während Cortana sie erfolgreich erkannte.

Mache ich etwas falsch?

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

Antwort

16

Streng genommen sind die Cortanas APIs diejenigen in der Windows.ApplicationModel.VoiceCommands namespace. Diese sind nicht für klassische Apps ("Desktop") verfügbar, aber für universelle Windows-Apps unter Windows 10. Der Grund dafür, dass klassische Apps die APIs nicht verwenden können, ist, dass sie auf Konzepten wie Background Tasks und App Identity basieren. t gilt für klassische Apps.

Die Typen in der Windows.Media.SpeechRecognition namespace sind auch für klassische Apps nicht verfügbar, aber ich bin nicht sicher, was die Begrenzung dort ist.

Hinweis: Wie unter @Andrew Pilley erwähnt, können Sie diese Typen möglicherweise in einer Desktop-App verwenden, aber dies wird derzeit nicht explizit unterstützt.

Wenn Sie nur Spracherkennung in einer .NET-App möchten, können Sie die System.Speech.Recognition namespace verwenden, die die gleiche zugrunde liegende Technologie verwendet.

+0

Hallo, vielen Dank für Ihre Antwort. Ich habe versucht, ein Klassenbibliotheksprojekt zu erstellen, aber in der Liste der verfügbaren Referenzen gibt es keine Windows.Media (oder ähnliche) Assembly. Die einzigen DLLs mit diesem Namen existieren im Pfad wie C: \ Windows \ WinSxS \ amd64_microsoft-windows-runtime-windows-media_31bf3856ad364e35_10.0.10240.16384_none_4f69ddc0692a98bf und sie sind COM-DLLs. Ehrlich gesagt, fühle ich mich ein bisschen verwirrt.Ich hätte erwartet, dass die DLL Teil von .Net Framework (oder Windows Sdk) und eine C# -Bibliothek sein würde. – simoneL

+0

Ich glaube, Sie haben diesen Teil der Antwort verpasst: "Die Typen im Windows.Media.SpeechRecognition-Namespace sind auch für Classic-Apps nicht verfügbar." Ich denke, Sie müssen sich System.Speech.Recognition ansehen. –

+0

Ja Brendan, du hast recht, ich habe es falsch verstanden. Als nächstes sollte ich früher zu Bett gehen :) Übrigens habe ich einige Code basierend auf Peter Antwort geschrieben und es in die ursprüngliche Frage aufgenommen. Ich habe eine Spracherkennung erreicht, aber es ist immer noch nicht gut genug. – simoneL

3

Während also Peter Torr Recht hat mit Cortana (der Windows.ApplicationModel.VoiceCommands API), können die neuen Speech Recognition WinRT APIs (Windows.Media.SpeechRecognition) in einer klassischen C# App verwendet werden, wenn Sie dazu bereit sind Verwenden der WinRT Interop-Bibliotheken.

Ich habe ausführlich beschrieben, wie man das in this answer to a stack overflow question einrichten kann, obwohl die Person, die diese Frage gestellt hat, einige Probleme hat, zu replizieren, was ich lokal zu arbeiten bekommen habe.

+0

Oh, das sieht vielversprechend aus! Ich werde versuchen, es zu implementieren, sobald ich kann :) – simoneL

+1

Seien Sie vorsichtig - die APIs können "arbeiten", aber sie sind nicht explizit für den Desktop-Einsatz getestet (es hat nicht die 'DualApiPartitionAttribute' oder' MuseAttribute' in der WinMD). –

0

Sie können Cortanas "WIN + C" -Ereignis aktivieren, indem Sie dieses "uri" wie einen neuen Prozess() aufrufen, auch wenn die Einstellung deaktiviert ist.

ms-cortana: // Startmode = Reactive & ListeningMode = True & QuerySource = VoiceShortcutKey & Stellungs = Desktop & SpeechTextInputHeight = 40 & ColorPrevalenceEnabled = true & PersonaOnlySupported = true & TaskbarOrientation = 3 & SearchBoxInTaskbar = false & AppsUseLightTheme = false & HideFileExtensions = false

Verwandte Themen