View this PageEdit this PageUploads to this PageVersions of this PageHomeRecent ChangesSearchHelp Guide

Uso de festival/MBrola para TTS (text-to-speech) en castellano

Festival (voz tipo robot)


De estos posts (los paquetes se corresponden con una beta de lenny):

Para que funcione hay que instalar los siguientes paquetes:
$ dpkg -l | grep fest
ii festival 1.96~beta-3 General multi-lingual speech synthesis syste
ii festlex-cmu 1.4.0-6 CMU dictionary for Festival
ii festlex-poslex 1.4.0-5 Part of speech lexicons and ngram from Engli
ii festvox-ellpc11k 1.4.0-3 Castilian Spanish male speaker for Festival
ii festvox-kallpc16k 1.4.0-5 American English male speaker for festival,
ii festvox-palpc16k 1.0-1 Male Spanish voice Voz for Festival
ii festvox-sflpc16k 1.0-1 Female Spanish voice for Festival


Por otro lado, para que pueda pronunciar una frase (tildes y eñes), el stdin de festival ha de estar en utf8 (del post que mencioné antes):

AcciónEjemplo
habla en ingles lo que esta escrito en readme$ festival --tts readme.txt
frase directa$ echo '(SayText "Good morning, welcome to Festival")' &vbar; festival --tts
Habla pero deletreando tildes y eñes
(sólo si el texto no está en utf8)
$ echo "Español, árbol, moño, Damián" &vbar; festival --tts --language spanish
iconv transforma la línea a utf permitiendo leer acentos y ñ$ less prueba_festival.txt &vbar; iconv -f utf-8 -t iso-8859-1 &vbar; festival --tts --language spanish
pasa lo que lee a archivo de sonido $ echo "Algún texto" &vbar; text2wave -eval "(Parameter.set 'Duration_Stretch 1.6)" -scale 5.0 -o archivo.wav

Y si quieres simplificar el decir cosas desde línea de comando, crea un script llamado 'di':

/usr/local/bin/di
#!/bin/bash
echo $1|iconv -f utf-8 -t iso-8859-1|festival --tts --language spanish


Y para usarla:
$ di "hola" 

Si se quiere usar el festival para generar un wav, se hace:

echo '(Parameter.set 'Audio_Method 'Audio_Command)' > ~/.festivalrc
echo '(Parameter.set 'Audio_Command "cat $FILE >> foo.raw")' >> ~/.festivalrc
festival --language spanish --tts /tmp/texto.txt
sox -c 2 -r 6500 -s -w foo.raw texto.wav


Y eso es todo :-).



MBrola (voz más humana, pero no apto para uso comercial o militar)


Tutorial basado en ircHa. Básicamente hay que instalar:

Una vez instalado, para convertir un archivo de texto que esté en utf8 a wav, se hace:

cat texto.txt | lee | mbrola -v 3 -t 0.8 /usr/share/ircha/es1/es1 - texto.wav

Y listo :).

Otras alternativas


Según este post, las alternativas a finales de 2009 eran:
  • FreeTTS: En Java, basado en Flite.
  • eSpeak: C++; voz extremadamente robótica.
  • euler: también voces robóticas; proyecto al parecer abandonado.
  • MBrola: Escrito en C; licencia que no permite uso comercial ni minitar; sólo sabe convertir fonemas a voz; requiere de un script que le convierta palabras a fonemas como puede ser el ircHa.
  • festival: En C++, tiene una versión lite (flite).
  • flite: reimplementación del festival en C.

Hay un wiki con más las alternaticas tanto libres como comerciales.