1. Speech APIs {Usando el Text to Speech} #WP8
Category Windows Phone 8
En este pequeño tutorial conoceremos una de las SpeechAPIs que el SDK de Windows Phone 8 nos
provee, la de Text to Speech, o lo que es igual a obtener un sonido a partir de un texto escrito.
NOTA: En WP7 teníamos la posibilidad de utilizar TTS (Text to Speech) mediante el uso de Bing
Speech API, la cual era una opción muy limitada, además de que necesitaba una conexión a
internet (para poder conectar con los servicios de Bing).
Empecemos desde 0 creando una nueva App:
Lo primero que haremos antes de continuar será añadir la capacidad de Reconocimiento de Voz
(ID_CAP_SPEECH_RECOGNITION). Para esto dentro de la carpeta Properties encontraremos el
archivo WMAppManifest.xml.
Lo abrimos y nos dirigimos a la pestaña de Capacidades:
2. Ahora es tiempo de hacer la parte grafica o visual con la que el usuario interactuara. En nuestro
archivo MainPage.xaml agreguemos un TextBox donde se pueda escribir un texto, el cual será
leído, junto a este un botón que provocara la lectura del mismo. Y para que exista un plus,
añadiremos también la posibilidad de elegir la voz (masculina o femenina).
Así quedara nuestro Grid principal ya con los elementos antes mencionados:
3. Añadamos el evento Clic al botón:
<Button Content="Leer"HorizontalAlignment="Left"Width="450"Click="Leer_Click" />
Después agreguemos el siguiente namespace en el code-behind (MainPage.xaml.cs) para trabajar
con la API Speech.
usingWindows.Phone.Speech.Synthesis;
Ahora agreguemos la lógica al evento que acabamos de crear.
privateasyncvoidLeer_Click (object sender, RoutedEventArgs e)
{
if (string.IsNullOrEmpty(inputTextBox.Text))
MessageBox.Show("Introduce alguntexto a leer");
else
{
try
{
SpeechSynthesizer synth = newSpeechSynthesizer();
var voices = InstalledVoices.All.Where(v =>v.Language == "es-
ES").OrderByDescending(v =>v.Gender);
VoiceGender gender = VoiceGender.Male;
if (rbHombre.IsChecked == true)
gender = VoiceGender.Male;
else
gender = VoiceGender.Female;
synth.SetVoice(voices.Where(v =>v.Gender == gender).FirstOrDefault());
awaitsynth.SpeakTextAsync(inputTextBox.Text);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
¿Qué fue lo que se agregó?
Bueno lo primero que realizamos fue instanciar un objeto de tipo SpeechSynthesizer, después con
4. LINQ seleccionamos el conjunto de sintetizadores españoles de la clase InstalledVoices.
Utilizamos los CheckBox para determinar el género elegido para la voz, después establecimos el
sintetizador elegido utilizando el método SetVoice y ya por ultimo llamamos al método
SpeakTextAsync que recibe el parámetro del texto para sintetizar a voz.
Así luce nuestra App:
Mas Información:
Channel 9: Windows Phone 8: Using the Speech API
Windows Phone Dev Center: Text-to-Speech (TTS) for Windows Phone
Pueden descargar el ejemplo de este tutorial a continuación.