C#.Net: Texto a Voz.

Posted: 17th julio 2008 by Wilmer Bravo Zapata in C#

A lo largo de nuestro ciclo de aprendizaje de la programación, muchos hemos aprendido a mostrar información en consola y luego en ventanas…

¿Pero alguna vez pensaste en que además de consola y ventanas, ambas con texto e imágenes, también podrías usar voz?

Y no se vale que grabes el sonido y luego lo reproduzcas para cada acción…

Vamos a aprender a hacer que nuestra aplicación aproveche las características de voz que incluye Windows.

Para este ejemplo utilicé Windows Vista, pero lo probé posteiormente en Windows Xp y funcionó correctamente.

La diferencia está en la voz, en Windows Xp se utiliza la voz Microsoft Sam, y en Windows Vista se utiliza la voz Microsoft Anna.

Requisitos previos:

  • Sistema operativo: Microsoft Windows Vista/XP
  • Lenguaje de programación: CSharp == C#
  • IDE de programación: Microsoft Visual C# 2008 Express (VisualStudio 2008 Professional o Team System)
  • Microsoft .NET Framework 3.0 o superior.

Ejemplo Básico:

Creamos nuestro proyecto, puede ser de Windows Forms, WPF o de consola.

Agregamos la referencia a System.Speech.

En la clase donde realizaremos las tareas haremos un using indicando el namespace: System.Speech.Synthesis;

Y ahora a divertirnos un poco…

Para un ejemplo sencillo:

Creamos un objeto de tipo SpeechSynthesizer:

SpeechSynthesizer ss = new SpeechSynthesizer();

Ahora ya estás a solo una línea de código de escuchar hablar a tu aplicación:

ss.Speak(“Hi! I’m your application…”);

Al objeto SpeechSynthesizer le llamamos el método Speak, y le indicamos el texto con las palabras que queremos escuchar… ¿Olvidé decir que en inglés?…Leí que Windows Vista Ultimate incluye más idiomas para el Texto a Voz, puedes comprobarlo buscando “Texto a voz” desde el menú de inicio…

Ahora sólo queda ejecutar nuestra aplicación y listo…

Ejemplo Avanzado:

El ejemplo anterior era el ejemplo básico… pero podemos hacer algo más elaborado usando el objeto PromptBuilder y PromptStyle, que nos permite definir algunas características de la voz que utilizará el SpeechSynthesizer …

A continuación un ejemplo con sus respectivos comentarios:

//Creamos nuestro objeto de tipo SpeechSynthesizer
//(Despues de haber agregado las referencias correpondientes)

SpeechSynthesizer speaker = new SpeechSynthesizer();

//Creamos un Objeto de tipo PromptBuilder
//Que nos permitirá crear una especie de guión para el texto a voz…
PromptBuilder guion = new PromptBuilder();

//Agregamos una porción de texto, que no será escuchado aún,
//pues por ahora sólo estamos formando el guión…

guion.AppendText(“This is a normal voice…”);

//El texto anterior será pronunciado de forma normal,
//como cuando usamos sólo el método Speak y le indicamos el texto…

//Si queremos cambiar el estilo de la voz,
//utilizamos un objeto de tipo PromptStyle,
//para aplicar algunos cambios a nuestro guión (PromptBuilder)

PromptStyle myStyle = new PromptStyle();

//Así que empezamos a definir el estilo de voz:

//La propiedad Rate del PromptStyle nos sirve para
//establcer la velocidad de la voz,  que puede ser:

//PromptRate.ExtraFast
//PromptRate.ExtraSlow;
//PromptRate.Fast;
//PromptRate.Medium;
//PromptRate.NotSet;
//PromptRate.Slow;

//En este caso utilizamos una voz Fast…
myStyle.Rate = PromptRate.Fast;

//Ahora definimos el tono de voz:
//PromptEmphasis.Moderate;
//PromptEmphasis.None;
//PromptEmphasis.NotSet;
//PromptEmphasis.Reduced;
//PromptEmphasis.Strong;

myStyle.Emphasis = PromptEmphasis.Strong;

//Hasta ahora sólo hemos definido el estilo,
//pero no lo hemos aplicado…

//Así que le decimos al guión que empiece a aplicar el
//estilo utilizando el método StartStyle del PromptBuilder:

guion.StartStyle(myStyle);

//Así el texto que agreguemos a partir de a inicialización anterior,
//tendrá el estilo que creamos:

guion.AppendText(“But This is my strong style…”);

//Cuando deseemos cambiar de estilo debemos finalizar la
//aplicación del estilo, utilizando el método EndStyle del PromptBuilder:

guion.EndStyle();

//El siguiente texto ya no estará afectado por el estilo
//que definimos anteriormente:

guion.AppendText(“This is my normal voice again…”);

//Bien, hasta aquí creamos y aplicamos nuestro estilo al guión,
//así que sólo queda decirle a nuestro SpeechSynthesizer qué debe decir:

//En vez de pasarle como argumentos una cadena de texto,
//usamos el PromptBuilder(al que hemos denominado guión para
//entenderlo mejor):
speaker.Speak(guion);

//Al hacer la llamada anterior hemos de escuchar la voz según
//lo que le indicamos con el PromptBuilder y el PromptStyle.

Espero que les halla gustado y que lo prueben…

Hasta la próxima…

Enviando notificacin...

Hello World!

Posted: 10th julio 2008 by Wilmer Bravo Zapata in Varios

He creado este blog para publicar algunas notas de programación que he hecho, así como las que espero hacer en el futuro…

Estas notas de programación están dirigidas a la comunidad ICESI, y a cualquier usuario que acceda al sitio con la intención de aprender y de disfrutar la programación…

Bienvenidos a mi blog, al que le he llamado Rincón de la Programación… un espacio para el Tiburón que llevamos dentro (Véase: ¿Eres rape o tiburón?)…

Enviando notificacin...