[Tips and Tricks] Windows Phone. Detener la sintetización de voz

Introducción

Una de las novedades más interesantes del SDK de Windows Phone 8 son las Speech APIs (Text to Speech, Speech to Text, Comandos de voz, etc.). Nos centrarnos en TTS (Text To Speech) o lo que es lo mismo sintetizar un sonido a partir de un texto escrito.

El problema

Ya en un artículo anterior vimos como utilizar esta API. Sin embargo, ene se artículo no veíamos un detalle muy importante. Una vez iniciada la slintetización de un texto, ¿cómo lo paramos?. A esa sencilla pregunta responderemos en este Tips and Tricks.

La solución

Vamos a crear una aplicación de ejemplo:

Aplicación de Windows Phone

Aplicación de Windows Phone

Lo primero que debemos hacer antes de continuar es aádir la capacidad de Reconocimiento de voz (ID_CAP_SPEECH_RECOGNITION). Para ello dentro de carpeta Properties encontramos el archivos WMAppManifiest.xml. Lo abrimos y nos dirigimos a la pestaña Capacidades:

ID_CAP_SPEECH_RECOGNITION

ID_CAP_SPEECH_RECOGNITION

Creamos la interfaz. Añadiremos la interfaz más simple posible para nuestro objetivo, un par de botones. Uno para comenzar a sintetizar texto en voz y el segundo para detenerlo:

<StackPanel>
     <Button Content="Leer" Click="Leer_Click"/>
     <Button Content="Parar de leer" Click="Parar_Click"/>
</StackPanel>
Text to Speech

Text to Speech

Añadimos los eventos en el code-behind:

private void Leer_Click(object sender, RoutedEventArgs e)
{

}

private void Parar_Click(object sender, RoutedEventArgs e)
{

}

Nos centramos en la lógica del primer botón. Para cancelar la síntesis de voz tenemos que asignar el valor devuelto por el método SpeakTextAsync del objeto SpeechSynthesizer a una variable de tipo IAsyncAction para posteriormente llamar al método Cancel del IAsyncAction para cancelar la síntesis de voz. Para ello, creamos una variable global de tipo IAsyncAction:

private IAsyncAction _task;

Y en la lógica del clic del botón:

var synth = new SpeechSynthesizer();

var voices = InstalledVoices.All.Where(v => v.Language == "es-ES").OrderByDescending(v => v.Gender);

synth.SetVoice(voices.FirstOrDefault(v => v.Gender == VoiceGender.Male));

_task = synth.SpeakTextAsync("Esto es una prueba. Realmente dura mucho más de lo necesario. Si quieres puedes parar pulsando el botón Parar Voz");

Instanciamos un objeto de tipo SpeechSynthesizer. Con LINQ seleccionamos el conjunto de sintetizadores españoles de la clase InstalledVoices. Seleccionamos el genéro masculino por ejemplo. Establecemos el sintetizador elegido utilizando el método SetVoice. Por último, llamamos al método SpeakTextAsync que recibirá como parámetro el texto a sintetizar en voz.

En el clic del segundo botón:

_task.Cancel();

Fácil, ¿verdad?

Podéis descargar el ejemplo desde el siguiente enlace:

Más información

Un pensamiento en “[Tips and Tricks] Windows Phone. Detener la sintetización de voz

  1. Pingback: Tips & Tricks de desarrollo para Windows Phone - MSDN España - Site Home - MSDN Blogs

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s