[#WINDOWSPHONE] Usando Text-to-Speech

I’m back! Reciclo este post que tenía preparado para mostrar como usar, de forma simple, una de las nuevas funcionalidades de Windows Phone 8. Mediante las APIs de Speech podremos pasar cadenas de caracteres a voz en muy pocas líneas de código (y viceversa). Vamos con el código.

Lo primero que debemos hacer es activar la capacidad de Speech en el manifiesto de nuestra aplicación…

c1

…y referenciar a la API de Synthesis en nuestro código

 C# |  copy code |? 
  1. using Windows.Phone.Speech.Synthesis;

Por último, sólo debemos pasarle una cadena de caracteres al SpeechSynthesizer con el texto que queremos que lea:

 C# |  copy code |? 
  1. public async void TextoAVoz(String texto)
  2. {
  3.        SpeechSynthesizer synth = new SpeechSynthesizer();
  4.        await synth.SpeakTextAsync(texto);
  5. }

Con esto se leerá el texto que le pasemos con la voz por defecto, pero podemos hacer consultas para especificar la voz con la que queremos que se lea el texto. Añadiendo las siguientes líneas a nuestro método podemos elegir idioma y género de la voz

 C# |  copy code |? 
  1. // Recuperamos las voces en español y de género femenino de entre las instaladas
  2. var vocesEnEspañol = from voice in InstalledVoices.All
  3.                      where voice.Language == "es-ES"
  4.                            && voice.Gender == VoiceGender.Female
  5.                      select voice;
  6. // Establecemos la primera de estas voces
  7. synth.SetVoice(vocesEnEspañol.FirstOrDefault());

La voz por defecto es en inglés y de género femenino. Para consultar el idioma se utiliza la nomenclatura de las culturas de la aplicación. El método completo quedaría:

 C# |  copy code |? 
  1. public async void TextoAVoz(String texto)
  2. {
  3.        SpeechSynthesizer synth = new SpeechSynthesizer();
  4.        // Recuperamos las voces en español y de género femenino de entre las instaladas
  5.         var vocesEnEspañol = from voice in InstalledVoices.All
  6.          where voice.Language == "es-ES"
  7.                                && voice.Gender == VoiceGender.Female
  8.                          select voice;
  9.        // Establecemos la primera de estas voces
  10.        synth.SetVoice(vocesEnEspañol.FirstOrDefault());
  11.        await synth.SpeakTextAsync(texto);
  12. }

Id sacando ideas, que tenemos el Megathon a la vuelta de la esquina! :)

Gk out

About Gorka Madariaga

Media Apps Dev en Plain Concepts, ex-Microsoft en el equipo de DPE/DX y parte del equipo de @TrackSeriesTv. Basketball coach-player-lover. Hay quien dice que soy de acero.