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...
  1. rogelio dice:

    primeramente quiero agradecerte por este aporte tengo tiempo buscando y son muy pocos los lugares que encuentro con esta tecnologia

    lo que quisiera pedir es un ejemplo para crear unha aplicacion la en la cual pueda oir q le digas por ejemplo productos y te abra la ventana de productos y q el programa te responda la venta de productos esta abierta

    creo que es algo realment facil el unico inconveniente qu podria encontrar es que quiero que sea en visual studio 2005 ya que en mi escuela se usa esa version.Detodos modos vere si se pueden cambiar a vs2008 pero en caso de que se pongan tercos aprender a usar la tecnologia speech en vs2005 seria lo ideal

    de antemano gracias y se que esto no es de tiburones T__T

  2. Wilmer Bravo Zapata dice:

    Gracias por tu comentario…

    Almenos con esta información podrás hacer la parte de respuesta de la PC, pero hasta ahora no he revisado cómo dictarle ordenes al programa…

    Si tengo algo de tiempo para revisarlo, lo haré…

    Acerca del visual studio podrás usar una versión express, o si no, puedes instalar las extensiones del framework 3.0 para VisualStudio2005 y probarlo…

  3. rogelio dice:

    muchas gracias ya pude usar la extencion de framework 3.0 en visual studio tambien estube investigando y consegui un programa para dictarle palabras y que este sea capas de reconocerlas conforme lo voy estudiando me doy cuanta de que eslo que nesesito tenre instalado para que funcione, pero hasta ahora solo lo he podido manejar en ingles no conocera alguna forma de cambiar a microsoft sam a español o de como instalar un motor de TTS en español he estado buscando y aunque lo mas viable parese ser el cambiar a SAM a el idioma latino me soy cuenta de que seria mas facil instalar otro motor de TTS y utilizar un poco de codigo para que mi programa utiliza este para realizar la voz

    asi que me seria de utilidad saber si es posible cambiar a SAM a spanish por que he leido mucho y parece que no se puede baje muchos porgramas como el mui pack en español y me dice que el programa no puede instalarse por que no es el idioma predeterminaso de OS

    en caso de que no se pueda cambiar ami gran amigo SAM pues como se si ya tengo instalado un MOTOR de TTS en español?

    agradesco mucho su ayuda y si tubiera algunos link para paginas externas o alguna informacion sobre este tipo adicional que me pudiera pro´porcionar se le agradeceria bastante (lamento si soy un poco molesto)
    le dejo mi correo por si pudiera mandarme informacion.

    gracias nuevamente.

  4. rogelio dice:

    –_– aque bruto soy deje toda la informacion menos micorreo de todos modos me lo pide la pagina para publicar el comentario pero por si acaso aqui esta : rlio_1@hotmail.com

  5. brigido dice:

    gracias, me fue muy util
    magnifico, me gustaría saber si se puede convertir a español

  6. Jtosme Movie dice:

    Tks…

    Great information! I’ve been looking for something like this for a while now. Thanks!…

*