MBROLA
MBROLA es un sintetizador del habla humana basado en la concatenación de dífonos. Toma como entrada una lista de fonemas junto con la información prosódica (duración de los fonemas y una descripción del tono de los mismos) y produce una salida de audio a 16 bits. Por tanto no es un conversor texto-voz (TTS) dado que no acepta texto como entrada. Más abajo veremos como hacerlo.
La licencia es algo curiosa, ya que es libre para uso no comercial y no militar. O sea, que no es completamente libre.
En la página del Proyecto MBROLA hay ejemplos que puedes escuchar en varios idiomas. Hay gran cantidad de bases de datos de dífonos para muchos idiomas en la sección de descargas.
Instalación
Tienes varias opciones: o bien te bajas los fuentes, o el binario ya compilado, o instalas los paquetes, que normalmente es la mejor opción. Por temas de licencia no están incluidos en los repositorios Ubuntu, pero te los puedes bajar de http://www.telefonica.net/web2/ircha/. Está el binario del programa y la base de datos de dífonos para español (voz castellana masculina). El otro paquete IrcHa tiene un programa que nos ayudará a leer texto con MBROLA, de modo que lo puedes instalar también.
Uso
Anteriormente dijimos que MBROLA no es un conversor de texto a voz realmente ya que no es capaz de leer un texto sino que necesita los fonemas. Pues IrcHa tiene un script llamado lee que hace eso mismo:
$ lee "Hola, mundo"
Ahora vamos a hacer el más difícil todavía, vamos a crear un MP3 con la frase hablada (en una sola línea):
$ echo "Niño, tienes hora?" | iconv -f utf-8 -t iso-8859-1 | lee | mbrola -v 3 -t 0.8 /usr/share/ircha/es1/es1 - -.wav | lame - salida.mp3
Vamos a explicar un poco cada parte.
- echo escribe la fase en el pipe.
- iconv convierte de UTF-8 a ISO-8859-1 que es lo que entiendo lee.
- lee al recibir el texto por la entrada estándar, genera una lista de los fonemas con su duración en lugar de leer la frase.
- mbrola recibe la lista de fonemas y genera el audio en formato WAV.
- lame recibe el audio y lo convierte a MP3 guardándolo en el fichero salida.mp3.
¡Todo un ejemplo de la potencia de los pipes!
Problemas con caracteres no-ASCII
Por defecto la codificación en Ubuntu es UTF-8, y este programa no está preparado para ello. Si haces:
$ lee "Hola, niño"
No oirás bien la palabra niño por la ñ. Para que funcione es mejor hacer:
$ lee $( echo "Hola, niño" | iconv -f utf-8 -t iso-8859-1 )
Problemas con la reproducción
Si estás escuchando música y usas lee verás un error de acceso al dispositivo /dev/dsp. Para evitarlo hay que modificar este script como root:
$ sudo gedit /usr/bin/lee
Y cambiar la línea esta que está por el final:
system("sox $mbrola_tmp.wav -t ossdsp /dev/dsp");
Por esta:
#system("sox $mbrola_tmp.wav -t ossdsp /dev/dsp"); system("esdplay $mbrola_tmp.wav");
Comentamos la anterior por si las moscas. La utilidad esdplay se encuentra en el paquete esound-clients.