2012-11-10 5 views
9

Sto provando a creare un'applicazione Windows Phone 8 che include un comando vocale. Il comando vocale fa qualcosa sulla falsariga di "Quali sono i migliori brani di [artista]", e quindi ho bisogno di usare una sorta di jolly per "[artista]" che permetterà all'utente di dire qualsiasi artista. Come potrei farlo senza elencare tutti gli artisti del mondo in una PhraseList?Come creare una lista Phrase che include ogni parola (carattere jolly)?

+1

Questo è sicuramente possibile Questa app, http: // www. windowsphone.com/en-us/store/app/wikipedia/fd40c569-2681-48df-9ff3-53ffd80aa9b5 lo fa. Puoi dire "Wikipedia, cerca ciao mondo questo è un test" o qualsiasi altra cosa. solo per quello. – msbg

+0

Aperto una taglia. Scusa per la terribile grammatica, non riesco a modificare il messaggio di taglie – msbg

+0

Sì, è possibile ora, sia per le app WinRT che per Silverlight 8.1. –

risposta

3

Questo è sicuramente possibile.

RISPOSTA CORRENTE Questo è possibile in Windows Phone 8.1 con i cosiddetti PhraseTopics.

versione lunga

In un primo momento è necessario dichiarare i requisiti ID_CAP_SPEECH_RECOGNITION e ID_CAP_MICROPHONE.

Successivamente si crea un file VCD (Descrizione comando vocale). Questo file è fondamentalmente un file XML che "dice" al telefono cosa ascoltare. (Nota Un elemento ListenFor può includere un carattere asterisco all'interno di una coppia di parentesi graffe per implementare la funzionalità jolly. Per ulteriori informazioni, vedere Elemento comando vocale e riferimento attributo (app Windows Phone Store).) (Preso da MSDN) Nel tuo caso questo file potrebbe ad esempio simile a questa:

<?xml version="1.0" encoding="utf-8"?> 
<VoiceCommands xmlns="http://schemas.microsoft.com/voicecommands/1.1"> 
    <CommandSet xml:lang="en-us" Name="SuperMusicFinder"> 
    <!-- Command set for all US English commands--> 
    <CommandPrefix>SuperMusicFinder</CommandPrefix> 
    <Example>Find Top 10 from Europe</Example> 

    <Command Name="findCharts"> 
     <Example>Find Europe Top 40</Example> 
     <ListenFor>Find [Europe Top40] {chartlist}</ListenFor> 
     <ListenFor>Get [US Top100] charts {chartlist}</ListenFor> 
     <Feedback>Looking up the charts for you-...</Feedback> 
     <Navigate /> 
     <!-- Navigation defaults to Main page --> 
    </Command> 

    <Command Name="topSongs"> 
     <Example>Show top songs by Pharrell Williams</Example> 
     <ListenFor>Show [number] {num} songs by [Pink]{artist} </ListenFor> 
     <ListenFor>Give me [number] {num} songs by [Beethoven]{artist}</ListenFor> 
     <ListenFor>Show [top songs] by [Pharell Williams]</ListenFor> 
     <Feedback>Okay, I got that. I will look up the songs you want!</Feedback> 
     <Navigate Target="/artistSong.xaml"/> 
    </Command> 

    <PhraseList Label="num"> 
     <Item> 1 </Item> 
     <Item> 2 </Item> 
     <Item> 3 </Item> 
    </PhraseList> 

    <PhraseTopic label="chartlist" Scenario="Chartlisting" /> 
    <PhraseTopic label="artist" Scenario="Artist" /> 

    </CommandSet> 
</VoiceCommands> 

allora avete bisogno di inizializzare il vostro VCD nel file App.xaml.cs:

using Windows.Phone.Speech.VoiceCommands; 


private async void Application_Launching(object sender, 
    LaunchingEventArgs e) 
{ 
    try 
    { 
    await VoiceCommandService.InstallCommandSetsFromFileAsync(
     new Uri("ms-appx:///SuperMusicFinderVCD.xml")); 
    } 
    catch (Exception ex) 
    { 
    // Handle exception 
    } 
} 

per gestire il comando vocale semplicemente effettuare le seguenti operazioni: Se dici ad esempio: "SuperMusicFinder mostra i migliori brani di P harell Williams "la query per questa richiesta sarebbe simile a qualcosa del genere: " /artistSong.xaml?voiceCommandName = topSongs & da = Pharell% 20Williams & reco = mostrare% 20top% 20songs% pharell% 20Williams"

private void artistSong_Loaded(object sender, RoutedEventArgs e) 
{ 
    if (this.NavigationContext.QueryString != null 
    && this.NavigationContext.QueryString.ContainsKey("voiceCommandName")) 
    { 
    // Page was launched by Voice Command 
    string commandName = 
     NavigationContext.QueryString["voiceCommandName"]; 
    string spokenNumber = ""; 
    if (commandName == "topSongs" && 
     this.NavigationContext.QueryString.TryGetValue("by", 
     out artist)) 
    { 
    //do whatever you want to do 
     } 
    } 
    } 
} 

È possibile trovare maggiori informazioni here - Nota: Tutti i frammenti di codice sono state prese da quel campione e modificati per adattarsi questa domanda, non sicuro al 100% se funziona, è possibile ottenere un codice di esempio che funziona con comandi "avanzati" su 8.1 o comandi semplici su 8.0 da here

+0

Questa sembra la risposta migliore, contrassegnandola (a meno che qualcuno non sia d'accordo?) – MatthewSot

+0

@Daniel Steiner - Cosa succede se volevo riconoscere i numeri in questa frase "18% su $ 25,56" o "18% su 25 dollari 56 centesimi"? – devcoder

+0

Questa è una domanda su Dio, non sono molto sicuro, ma posso guardare se riesco a trovare qualcosa al riguardo. –

2

No, i comandi vocali WP8 non supportano i caratteri jolly nell'elenco di frasi. Il problema è che WP8 non sarà in grado di eseguire il riconoscimento vocale locale sull'audio senza un elenco di frasi fisse. Per le frasi jolly, il WP8 dovrebbe eseguire la sintesi vocale nel cloud ogni volta che l'utente utilizza i comandi vocali del WP8 e non è una buona UX.

In questo momento il numero massimo di frasi che possono essere supportate nei comandi vocali è 2,000 phrases. Questo è attraverso tutti i comandi per una singola app. E questo limite è in atto per rendere più semplice la disambiguazione e fornire ai consumatori risultati più accurati. In generale, è meglio usare meno frasi possibili per rendere più accurata la disambiguazione.

Esiste una soluzione consigliata per un caso giustificato che richiede le frasi con caratteri jolly nei comandi vocali. Primo passo, avere un comando vocale "*" che avvia l'app per la sintassi corretta. Una volta che l'app è aperta, utilizza l'applicazione vocale al testo nell'app (utilizzando SpeechRecognizer) facendo ripetere all'utente il comando specifico e questo attiverà la sintesi vocale nel cloud.

+1

Hmm, pensavo fosse vero, ma poi ho visto l'app di Wikipedia di Rudy Huyn. Quell'app ti consente di cercare qualsiasi termine che desideri da Riconoscimento vocale. Non sono sicuro di come lo fa, ma sembra possibile. – msbg

Problemi correlati