Windows Phone 8. Usando Text to Speech.

Introducción

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

NOTA: En Windows Phone 7 teníamos la posibilidad de de utilizar Text to Speech mediante el uso de Bing Speech API. Era una opción mucho más limitada además que requería conexión a internet (para conectar con los servicios de Bing).

TTS (Text To Speech)

Vamos a crear una aplicación de ejemplo donde utilizaremos Text to Speech e iremos viendo sus posibilidades:

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

Nuestro objetivo será añadir un TextBox donde se pueda escribir un texto a leer junto a un botón para provocar la lectura del mismo. Tambien añadiremos la posibilidad de elegir voz (masculina o femenina). Nos centramos en el archivo MainPage.xaml para preparar la interfaz de nuestra aplicación. Dentro del Grid principal de la aplicación (ContentPanel) añadimos:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
     <StackPanel>
          <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
               <RadioButton x:Name="rbMale" Content="Masculino" IsChecked="true"/>
               <RadioButton x:Name="rbFemale" Content="Femenino"/>
          </StackPanel>
          <TextBox HorizontalAlignment="Left" Height="450" TextWrapping="Wrap" Width="450" Text="Prueba de lectura desde Windows Phone 8!" Name="inputTextBox"/>
          <Button Content="Leer" HorizontalAlignment="Left" Width="456"/>
     </StackPanel>
</Grid>

Simple. Permitiremos elegir el tipo de voz, introducir un texto y un botón para reproducir en voz el texto introducido. Añadimos el evento Click del botón:

<Button Content="Leer" HorizontalAlignment="Left" Width="456" Click="SpeakClick"/>

En el code-behind (MainPage.xaml.cs):

private async void SpeakClick(object sender, RoutedEventArgs e)
{

}

Debemos añadir el siguiente namespace para trabajar con la API Speech:

using Windows.Phone.Speech.Synthesis;

Vamos a añadir la lógica del botón:

private async void SpeakClick(object sender, RoutedEventArgs e)
{
     if (string.IsNullOrEmpty(inputTextBox.Text))
          MessageBox.Show("Introduce algun texto a leer.");
     else
     {
          try
          {
               SpeechSynthesizer synth = new SpeechSynthesizer();

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

               VoiceGender gender = VoiceGender.Male;

               if (rbMale.IsChecked == true)
                    gender = VoiceGender.Male;
               else
                    gender = VoiceGender.Female;

               synth.SetVoice(voices.Where(v => v.Gender == gender).FirstOrDefault());

               await synth.SpeakTextAsync(inputTextBox.Text);
          }
          catch (Exception ex)
          {
               MessageBox.Show(ex.Message);
          }
     }
}

Instanciamos un objeto de tipo SpeechSynthesizer. Con LINQ seleccionamos el conjunto de sintetizadores españoles de la clase InstalledVoices. Utilizamos los CheckBox para determinar el género elegido para la voz. Establecemos el sintetizador elegido utilizando el método SetVoice. Por último, bastará con llamar al método SpeakTextAsync que recibirá como parámetro el texto a sintetizar en voz.

Como podemos analizar se requiere muy poco código. Es una API muy sencilla de utilizar.Nuestro ejemplo se vería:

Text to Speech

Puedes descargar el ejemplo realizado a continuación:

Espero que lo visto en la entrada os resulte interesante. A mi personalmente aunque haya nuevas APIs en Windows Phone 8 que me han parecido increíbles, esta particularmente me impresiona por su sencillez de uso. Tenedla en cuenta para aumentar la accesibilidad de vuestras aplicaciones.

En próximas entradas seguiremos profundizando en su uso (Speech to Text, es decir, lo contrario a lo visto, comandos de voz que nos permitirán ejecutar acciones en nuestras aplicaciones según ordenes de voz, etc.). Recordar, cualquier duda o sugerencia será bienvenida en los comentarios de la entrada.

Más información

3 pensamientos en “Windows Phone 8. Usando Text to Speech.

  1. Pingback: [Tips and Tricks] Windows Phone. Detener la sintetización de voz | Javier Suárez Ruiz | Blog

  2. Pingback: [Tips and Tricks] Windows Phone. Detener la sintetización de voz - Javier Suárez

  3. Pingback: [Universal Apps] Utilizando Text to Speech | Javier Suárez Ruiz | Blog

Deja un comentario