2015-08-10 19 views
11

Desidero sviluppare un'applicazione Windows su Windows 10 utilizzando il nuovo motore Cortana.Le API Cortana sono disponibili per le applicazioni desktop?

Purtroppo, per quanto ne so, sembra essere disponibile solo su Windows Phone 8.1 progetto (ad esempio, non ho trovato un modo per accedere allo spazio dei nomi Windows.Media.SpeechRecognition da un diverso tipo di Visual Studio progetto).

Inoltre, non sono riuscito a trovare una buona documentazione API, solo alcuni esempi molto semplici.

Edit:

Sulla base di Peter Torr risposta che ho scritto qualche codice. Sono stato in grado di riconoscere qualche parola ma il motore sembra faticare quando ha provato a riconoscere alcune parole semplici come "Ciao", mentre Cortana lo ha riconosciuto con successo.

Sto facendo qualcosa di sbagliato?

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

risposta

16

A rigor di termini, le API Cortana sono quelli del Windows.ApplicationModel.VoiceCommands namespace. Queste non sono disponibili per le app Classic ("Desktop"), ma sono disponibili per le app universali di Windows su Windows 10. Il motivo per cui le app classiche non possono utilizzare le API è perché si basano su concetti come attività in background e identità app che non possono essere utilizzate. t applicare alle app classiche.

I tipi nello Windows.Media.SpeechRecognition namespace non sono disponibili per le app classiche, ma non sono sicuro di quale sia la limitazione.

Nota: come dice @Andrew Pilley, potresti riuscire a far funzionare questi tipi in un'app Desktop, ma al momento non è esplicitamente supportato.

Se si desidera solo il riconoscimento vocale in un'app .NET, è possibile utilizzare lo System.Speech.Recognition namespace, che utilizza la stessa tecnologia di base.

+0

Ciao, grazie mille per la risposta. Ho provato a creare un progetto di libreria di classi ma nell'elenco dei riferimenti disponibili non esiste un assembly Windows.Media (o simile). Le uniche DLL con quel nome esistono in path come C: \ Windows \ WinSxS \ amd64_microsoft-windows-runtime-windows-media_31bf3856ad364e35_10.0.10240.16384_none_4f69ddc0692a98bf e sono DLL di COM. Onestamente, mi sento un po 'confuso.Mi aspetto che la DLL faccia parte di .Net Framework (o Windows Sdk) e sia una libreria C#. – simoneL

+0

Penso che ti sia sfuggita questa parte della risposta: "I tipi nello spazio dei nomi Windows.Media.SpeechRecognition non sono disponibili per le app classiche". Penso che tu debba guardare System.Speech.Recognition. –

+0

Sì, Brendan, hai ragione, ho letto male. Quindi dovrei andare a letto prima :) A proposito, ho scritto del codice basato sulla risposta di Peter e l'ho incluso nella domanda originale. Ho ottenuto alcuni riconoscimenti vocali, ma non è ancora abbastanza buono. – simoneL

3

Quindi, mentre Peter Torr ha ragione su Cortana (l'API Windows.ApplicationModel.VoiceCommands), le nuove API WinRT Speech Recognition (Windows.Media.SpeechRecognition) possono essere utilizzate in un'app C# classica, se sei disposto usare le librerie Interop WinRT.

Ho spiegato come impostarlo su this answer to a stack overflow question, sebbene la persona che ha posto questa domanda abbia qualche problema a replicare ciò che ho dovuto lavorare localmente.

+0

Oh, sembra promettente! Cercherò di implementarlo il prima possibile :) – simoneL

+1

Fai attenzione: le API potrebbero "funzionare" ma non sono testate esplicitamente per l'utilizzo desktop (non ha "DualApiPartitionAttribute" o "MuseAttribute" in WinMD). –

0

È possibile attivare l'evento "WIN + C" di Cortana semplicemente chiamando questo "uri" come un nuovo Processo(), anche quando l'impostazione è disattivata.

ms-Cortana: // StartMode = Reattivo & ListeningMode = True & QuerySource = VoiceShortcutKey & posizionatore = tavolo & SpeechTextInputHeight = 40 & ColorPrevalenceEnabled = true & PersonaOnlySupported = true & TaskbarOrientation = 3 & SearchBoxInTaskbar = false & AppsUseLightTheme = false & HideFileExtensions = false

Problemi correlati