c# - uso - palabras muletillas
¿Cómo crear una lista de frases que incluya cada palabra(comodín)? (3)
Intento crear una aplicación para Windows Phone 8 que incluya un comando de voz. El comando de voz va algo así como "¿Cuáles son las mejores canciones de [artista]", y entonces necesito usar algún tipo de comodín para "[artista]" que permita al usuario decir cualquier artista. ¿Cómo podría hacer esto sin enumerar a todos los artistas del mundo en una lista de frases?
¿Funciona "¿Cuáles son las mejores canciones de {*}"? Al menos la documentación menciona esto para el elemento ListenFor en la configuración. Elemento de comando de voz y referencia de atributo para Windows Phone 8
No, los comandos de voz WP8 no admiten comodines en la lista de frases. El problema es que WP8 no podrá realizar el reconocimiento de voz local en audio sin una lista de frases fija. Para las frases comodín WP8 tendría que realizar voz a texto en la nube cada vez que el usuario utilizara los comandos de voz de WP8 y ese no es un buen UX.
En este momento, la cantidad máxima de frases que podrían ser compatibles con los comandos de voz es de 2.000 frases . Eso es en todos los comandos para una sola aplicación. Y ese límite está en su lugar para facilitar la desambiguación y proporcionar a los consumidores resultados más precisos. En general, es mejor utilizar el menor número posible de frases para hacer que la desambiguación sea más precisa.
Hay una solución recomendada para un uso justificado que necesita frases comodín en los comandos de voz. El primer paso, tiene un comando de voz "*" que inicia la aplicación para la sintaxis correcta. Una vez que la aplicación está abierta, use la función de voz a texto en la aplicación (usando SpeechRecognizer ) haciendo que el usuario repita su comando específico y que active el discurso a texto en la nube.
Esto es definitivamente posible.
RESPUESTA CORTA Esto es posible en Windows Phone 8.1 con los llamados PhraseTopics.
VERSIÓN LARGA
Al principio, debe declarar los requisitos ID_CAP_SPEECH_RECOGNITION
e ID_CAP_MICROPHONE
.
Luego crea un archivo de VCD (descripción del comando de voz). Este archivo es básicamente un archivo XML que "le dice" al teléfono qué escuchar. (Nota Un elemento ListenFor puede incluir un carácter de asterisco dentro de un par de llaves para implementar la funcionalidad de comodín. Para obtener más información, consulte Referencia de atributo y elemento de comando de voz (aplicaciones de Windows Phone Store).) (Tomado de MSDN) En su caso, este archivo sería, por ejemplo, así:
<?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>
Luego debe inicializar su VCD en el archivo 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
}
}
Para manejar el Comando de voz simplemente haga lo siguiente: Si dice por ejemplo: "SuperMusicFinder muestra las mejores canciones de Pharell Williams", la consulta para esta solicitud sería similar a algo como esto: "/artistSong.xaml?voiceCommandName=topSongs&by=Pharell% 20Williams & reco = mostrar% 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
}
}
}
}
Puede encontrar más información aquí - Nota: Todos los fragmentos de código fueron tomados de esa muestra y editados para ajustarse a esta pregunta, no 100% seguro de que si esto funciona, puede obtener un código de muestra que funcione con comandos "avanzados" en 8.1 o comandos simples en 8.0 desde aquí