"Hablaré con el corazón abierto en palabra de voluntad
y
razón de sentimiento."
---Si quieres construir un barco, no empieces por buscar madera, cortar tablas o distribuir el trabajo. Evoca primero en los hombres y mujeres el anhelo del mar libre y ancho---

miércoles, 19 de septiembre de 2007

TTS (Text To Speech ) usando Festival y MBrola en Debian ETCH

TTS (Text To Speech ) usando Festival y MBrola

Vamos a hacer a nuestro equipo en un lector de textos, mi proposito es
utilizar este sistema para aprender a pronunciar oraciones en otros
idiomas, en especial en frances, creo que es una gran herramienta para
ello, posteriormente voy a desarrollar una extensión para Firefox,
para que pueda leerle al usuario, sobre todo para las personas con
problemas visuales y por otro lado estoy ideando un software para
enseñar frances, claro, desarrollado para que se ejecute en Gnome, son
bienvenidos los voluntarios, dejen sus comentarios.

Festival

El nombre completo es Festival Speech Synthesis System, el cual es un
sistema de lo mas completo hecho para convertir texto en sonido y
viceversa, es un proyecto que ya tiene mucho tiempo, se puede
encontrar toda la información necesaria en
http://www.cstr.ed.ac.uk/projects/festival/ y en http://festvox.org.

Para instalarlo en Ubuntu tenemos que tener habilitados los
repositorios extras en el apt y teclear lo siguiente en una terminal.

#$: sudo aptitude install festival festlex-cmu festlex-poslex
festvox-ellpc11k festvox-kallpc16k libestools1.2

Aproximadamente se van a descargar como 40 MB y con esto vamos a tener
todo lo necesario para que pueda hablar nuestro equipo. Ahora vamos a
hacer unas pruebas para sorprendernos.

Vamos a hacer que nos salude en ingles, primero entramos a festival,
donde vamos a trabajar en un entorno de comandos del propopio festival

#$: festival

Vamos a ver algo como esto:

Festival Speech Synthesis System 1.4.3:release Jan 2003
Copyright (C) University of Edinburgh, 1996-2003. All rights reserved.
For details type `(festival_warranty)'
festival>

Ahora vamos a teclear lo necesario para emitir el sonido y escuchar
por primera vez a nuestro equipo. En la linea de comandos escribimos:

festival> (SayText "Hello Mr. MINOMBRE. How are you?")

¿Sorprendidos?, bueno aun queda que nos hable en español, ahora vamos
a salirnos de festival, para hacer esto solo escribimos "quit" y como
pueden ver, los comandos se escriben dentro de los parentesis:

festival> (quit)

Listo ahora vamos a hacer lo mismo pero con la voz en español, para
esto lo único que va a cambiar es mandar llamar festival con la opcion
"--language spanish":

#$: festival --language spanish

Y ahora en los comandos vamos a teclear lo siguiente

festival> (SayText "Hola wey. ¿Como estas canijo?")

Jaja ya se escucha mejor. ¿No? Bueno, todo bien, un ultimo paso para
terminar con festival. Festival se divide en dos partes, los comandos
y el TTS o Text To Speech, hasta ahorita hemos trabajado con puros
comandos, para utilizar el TTS es muy sencillo, vamos primero a crear
un archivo con un texto que querramos que festival lea.

#$: touch textoejemplo
#$: echo "El mejor es el que se parece a una piedra, sin desenvainar
la espada, consigue probar que nadie podra vencerlo" > textoejemplo

Ahora vamos a decirle a festival que lea esto en español:

#$: festival --language spanish --tts textoejemplo

No es nada dificil, ahora solo tenemos que poner nuestros libros en
archivos de texto, y decirle a linux que los lea por nosotros :D

MBrola

MBrola que se lee como 'im' 'brela' en un sentido como 'umbrella' que
es una palabra en ingles que significa sombrilla y no es el nombre de
la empresa que creó al virus de Resident Evil.

El proyecto MBrola fué iniciado por el laboratorio TCTS de la Facultad
Politécnica de Mons en Belgica, puedes ver más información en
http://tcts.fpms.ac.be/synthesis/mbrola.html, te recomiendo que des
click en las banderas que aparecen en la página, pero bueno. ¿Qué es
Mbrola? Tal vez ya haz notado que se oye MUY robotizada la voz que
emite festival, ah pues este proyecto se centra en esto, en mejorar la
pronunciación de festival y de otros sistemas, dejando que la voz se
escuche lo más natural posible, en veces no notas que el que esta
hablando es una aplicación, es por eso que la licencia de este
proyecto es solo para uso no comercial, ni para uso militar. ¡Ojo!
Sobre advertencia no hay engaño.

Bueno, ahora instalemos a MBrola, primero vayamos a
http://tcts.fpms.ac.be/synthesis/mbrola.html y descarguemos el
binario, en el caso para este tutorial es Linux i386 con el archivo
mbr301h.zip y también hay que descargar los archivos de las voces,
estas son las voces que yo recomiendo, tu puedes bajar la(s) que tu
creas convenientes:

us1: American English Female (6.8Mb) -> us1-980512.zip
fr4: French Female (5.4Mb) -> fr4-990521.zip
it4: Italian Female (4.9Mb) -> it4-010926.zip
es2: Spanish Male (5.1Mb) -> es2-989825.zip
mx2: Spanish Mexican Male (3.5Mb) -> mx2.zip

Te recomiendo dejar todos estos archivos en dos directorios distintos,
uno para MBrola y otro para las voces.

Para instalar MBrola necesitamos tener instalado unzip, si no sabemos
si lo tenemos basta con teclear lo siguiente:

#$: unzip

Si no regresa un mensaje de que no existe el comando entonces lo
instalamos con lo siguiente:

#$: sudo aptitude install unzip

Bueno, una vez que ya lo tenemos instalado, vamos a extraer primero lo
de archivo mbrXXXh.zip (XXX es la version que hayas descargado en mi
caso es 301):

#$: unzip mbr301h.zip

Esto nos va a dejar 7 archivos, te recomiendo que leas el archivo
readme.txt solo para una mayor referencia.

Tenemos ahora que mover el archivo mbrola-linux-i386 al directorio
/usr/bin y dejarlo con el nombre de mbrola, teclemos lo siguiente para
hacerlo:

#$: sudo mv mbrola-linux-i386 /usr/bin/mbrola

Hay que descargar otro archivo de la siguiente direccion
http://www.cstr.ed.ac.uk/downloads/festival/1.95/festvox_us1.tar.gz y
extraemos su contenido:

#$: tar -zxvf festvox_us1.tar.gz

Nos va a crear un directorio con varios subdirectorios dentro, nos
vamos hasta el subdirectorio festival/lib/voices/english

#$: cd festival/lib/voices/english/

Ahora copiamos el directorio us1_mbrola/ a /usr/share/festival/voices/english/

#$ sudo cp -rf * /usr/share/festival/voices/english/

Ahora extraemos los archivos del zip de voz us1

#$: unzip us1-980512.zip

Y copiamos el directorio us1 a /usr/share/festival/voices/english/us1_mbrola/

#$: sudo cp -Rf us1 /usr/share/festival/voices/english/us1_mbrola/

Hay que probar que todo va muy bien, entremos a festival y usemoslo
con esta nueva voz:

#$: festival
festival> (voice_us1_mbrola)
festival> (SayText "I am a machine, but I look like a real women")

Vamos a dejar por el momento esta voz como la predefinida:

#$: sudo gnome-text-editor /etc/festival.scm

Agregamos al final la linea:

(set! voice_default 'voice_us1_mbrola)

Lo guardamos y reiniciamos el servidor de festival:

#$: sudo /etc/init.d/festival restart

¿Que tal? Nada mal para ser una computadora, bueno ahora falta lo mas
importante, instalar la voz en español y en frances.

Aun no se como hacerle para poner la nueva voz en frances en festival
y usando mbrola, lo dejamos para otra ocasión, pero vamos a hacer otro
método, tenemos que descargar el archivo
http://download.gna.org/lliaphon/stable/lliaphon-0.4.tar.gz extraemos
el contenido, y lo instalamos:

#$: tar -zxvf lliaphon-0.4.tar.gz
#$: cd lliaphon-0.4
#$: ./configure
#$: make
#$: sudo make install

Creamos una carpeta que se llame "mbrola" en /opt

#$: sudo mkdir /opt/mbrola

Copiamos la carpeta que contiene la voz en frances que descargamos previamente.

#$: mkdir fr4
#$: mv fr4-990521.zip fr4/
#$: cd fr4
#$: unzip fr4-990521.zip
#$: sudo cp -Rf fr4 /opt/mbrola/

Creamos un archivo que se llame dire y le ponemos el siguiente contenido

#$: gnome-text-editor dire

-------------- CONTENIDO --------------
#!/bin/sh

#voix par défaut si argument 2 absent
if [ ! "$2" ]
then
DefVoice=fr4/fr4
else
DefVoice=$2
fi

MBROLA_VOICE=/opt/mbrola/$DefVoice

#tranformation du texte par lliaphon pour mbrola
echo $1 > /tmp/lliaphon_dire
/usr/local/bin/lliaphon /tmp/lliaphon_dire

/usr/bin/mbrola -I /usr/local/share/lliaphon/initfile.lia $MBROLA_VOICE /tmp/lliaphon_dire.ola -.au |
aplay -t au -

rm /tmp/lliaphon_dire
rm /tmp/lliaphon_dire.ola
-------------- FIN --------------

Lo guardamos, le cambiamos los permisos para que sea un ejecutable y
lo movemos a /usr/local/bin

#$: chmod 755 dire
#$: sudo mv dire /usr/local/bin/

Por último nos queda hacer una prueba

#$: dire "Bonjour, Au revoir"

Paquetes extras recomendables:

ksayit
kttsd
kmouth
gnopernicus

Referencias:

[En] http://www.cstr.ed.ac.uk/projects/festival/
[En] http://festvox.org
[En] http://festvox.org/voicedemos.html
[En] http://tcts.fpms.ac.be/synthesis/mbrola.html
[En] http://research.iiit.ac.in/~smr/cgi-bin/blosxom.cgi/blogs/hacking/1135586734.html
[En] http://www.speech.cs.cmu.edu/
[En] http://www.cs.cmu.edu/~awb/festival_demos/bvif.html
[En] http://www.cslu.ogi.edu/tts/
[Fr] http://www.kik-it.com/?RUB=1&debut=7
[En] http://tcts.fpms.ac.be/synthesis/mbrola.html
[En] http://download.gna.org/lliaphon/