Hacer que raspberry hable con festival [Manual]


8 posts
by hiddenotebook » Wed Oct 14, 2015 6:51 pm
Festival es un sintetizador de texto a voz, con el podemos hacer que lea documentos y dejar que lea paginas web por nosotros, podemos hacer que lea las instrucciones de las aplicaciones con el comando man y muchas cosas mas, mi objetivo es usarlo con Julius para poder hablar con Raspi e interactuar con la voz llevo unas semanas trasteando con festival y esto es lo que he podido averiguar por el momento.

En esta guía se aprende a poner voces femeninas y a ponerlas por defecto como idioma predeterminado, también se enseña a leer documentos en diferentes idiomas y haremos dos scripts con dos atajos de teclado para leer cosas de la web o de documentos en ingles y español sin tener que configurar nada, solo con el atajo de teclado.

Instalación:

Code: Select all
sudo apt-get -y install festival

Para usar a salida de audio jack:

Code: Select all
amixer cset numid=3 1

Vamos a probarlo escribe en el terminal el siguiente comando, esto hará que Festival diga todo lo que esta entre comillas.

Code: Select all
echo "Hi dude, how can I help you?" | festival --tts

También puedes mandar a Festival que te lea cosas del sistema, la hora, día, y año.

Code: Select all
hostname | festival --tts
man gedit | festival --tts
date "+%H:%M %P %A %d %B %Y"| festival --tts


Y así todo lo que imagines, también podemos leer documentos Festival es bilingue así que podemos leer en diferentes idiomas usando el idioma después del comando | festival --tts vamos a ver ejemplos. (en estos momentos dará error en español porque la voz el_diphone no esta instalada más adelante lo arreglamos)

En español hola mundo y despues la fecha:

Code: Select all
echo "Hola Mundo" | festival --language spanish --tts
date +"%H horas y %M minutos del %A %d d %B d %Y" | iconv -f utf-8 -t iso-8859-1  | festival --language spanish --tts


Para guardar la voz en mp3: (puede que necesites instalar lame y mplayer)
Code: Select all
cat hola.txt | text2wave | lame - file.mp3 && mplayer file.mp3


Para guardar la voz en .wav
Code: Select all
text2wave <file> -o <output.wav>


Ingles.

Code: Select all
echo "hello world" | festival --tts

Ingles americano.

Code: Select all
echo "hello world" | festival --tts --language americanenglish

Festival por defecto soporta, Englis, spanish, italian, finnish, russian, scots, welsh, czech.

Si quieres puedes buscar voces para estos idiomas.

Code: Select all
pi@raspberrypi ~ $ sudo apt-cache search festvox-*

festvox-czech-ph - Czech male speaker for Festival
festvox-hi-nsk - Hindi male speaker for festival
festvox-itapc16k - Italian male speaker for Festival
festvox-kdlpc8k - American English male speaker for festival, 8khz sample rate
festvox-ru - Russian male speaker for Festival
festvox-suopuhe-lj - Finnish female speaker for Festival
festvox-rablpc8k - British English male speaker for festival, 8khz sample rate
festvox-us1 - mbrola-us1 voice support for festival
festvox-ellpc11k - Castilian Spanish male speaker for Festival

Da una salida parecida con muchas voces para instalar a mi personalmente no me gustan todas solo la festvox-us1 que es voz de mujer americana ya que yo he vivido en USA y es la que mas me gusta, vamos a instalar us1 y la voz de mujer en español. Pero el que quiera probar las voces solo tiene que escribir en el terminal el siguiente comando, (las voces de 16k son las mejores) si quieres probar italiano por ej:

Code: Select all
sudo apt-get install festvox-itapc16k 

A mi personalmente me interesa en ingles para adquirir mas conocimientos del lenguaje, pero no esta de más poder cambiar de idioma. Para esto vamos a usar la voz de Silvia del proyecto Guadalinex también tienen voz de chico pero no me interesa pueden encontrar la voz aquí. Vamos a instalar a Silvia : ) primero tenemos que descargar la voz.

Code: Select all
wget http://forja.guadalinex.org/frs/download.php/154/festvox-sflpc16k_1.0-1_all.deb

Descomprimir e instalar.

Code: Select all
dpkg -i festvox-sflpc16k_1.0-1_all.deb

Esto edita el fichero festival.scm y añade esto (set! voice_default 'voice_JuntaDeAndalucia_es_sf_diphone) al final del archivo forzando que sea la voz por defecto pero no es la forma correcta de hacerlo si queremos usar varios idiomas, así que vamos allí y la borramos o la comentamos.

Code: Select all
sudo nano /etc/festival.scm

Buscamos (set! voice_default 'voice_JuntaDeAndalucia_es_sf_diphone) y la borramos o la podemos dejar comentada para que Festival lo ignore, se comenta con doble punto y coma ;;

Code: Select all
;;(set! voice_default 'voice_JuntaDeAndalucia_es_sf_diphone)

Ahora vamos a arreglar el error que da si le pedimos leer en español.

Code: Select all
festival --language spanish --tts /home/pi/Desktop/Spanish.txt

En este caso usara la voz que hay configurada en language_castillian_spanish.scm para spanish que es el_diphone. Claro que la usa si la tiene instalada, si no la tiene por supuesto que da error.

Code: Select all
SIOD ERROR: unbound variable : voice_el_diphone
festival: fatal error exiting.


Es muy fácil arreglar esto, lo que esta pasando es que festival llama a una voz configurada por defecto y simplemente no la tengo instalada se
arregla con instalar la voz. Pero que hacer cuando yo quiero que use la voz que mas me gusta siempre... también es muy fácil hacer solo tenemos que editar dos archivos de texto que son language_castillian_spanish.scm y voices.scm se encuentran en la ruta /usr/share/festival/languages

Vamos a editar el primer archivo para poner a Silvia como voz por defecto en Español ingresamos en el directorio languages con:

Code: Select all
cd /usr/share/festival/languages

Y miramos que nos encontramos con el comando 'ls'

Code: Select all
language_american_english.scm    language_italian.scm
language_british_english.scm     language_russian.scm
language_castillian_spanish.scm  language_scots_gaelic.scm
language_czech.scm               language_welsh.scm
language_finnish.scm

Muestra una lista de archivos, en ellos se configura la voz que usara Festival por defecto en cada uno de los idiomas. Vamos a modificar el nuestro con 'gedit' 'nano' o cualquier otro:

Code: Select all
sudo gedit language_castillian_spanish.scm

Al final del archivo busca esta parte de código aquí esta el_diphone como voz por defecto para el castellano:

Code: Select all
(define (language_castillian_spanish)
"(language_spanish)
Set up language parameters for Castillian Spanish."

  (voice_el_diphone)
  (set! male1 (lambda () (voice_el_diphone)))

  (Parameter.set 'Language 'spanish)
)

(language.names.add 'castillian_spanish (list 'spanish 'castellano))

Como se puede ver la voz por defecto es el_diphone para poner a Silvia lo cambias/reemplazas por esto otro voice_JuntaDeAndalucia_es_sf_diphone

Code: Select all
(define (language_castillian_spanish)
"(language_spanish)
Set up language parameters for Castillian Spanish."

  (voice_JuntaDeAndalucia_es_sf_diphone)
  (set! male1 (lambda () (voice_JuntaDeAndalucia_es_sf_diphone)))

  (Parameter.set 'Language 'spanish)
)

(language.names.add 'castillian_spanish (list 'spanish 'castellano))

Guardamos los cambios y ya esta, básicamente lo que hacemos es cambiar la voz el_diphone por la voz de JuntaDeAndalucia_es_sf_diphone comprobamos que habla bien en castellano.

Code: Select all
echo "Hola Mundo" | festival --tts --language spanish

Vamos a por el segundo archivo la parte de código a tocar es una lista de disponibilidad de las voces por defecto default-voice-priority-list
y en ella vamos a añadir la voz de Silvia de la Junta De Andalucia (La primera voz de esta lista se convierte en el idioma por defecto para Festival)

Code: Select all
sudo nano /usr/share/festival/voices.scm

Buscamos la parte:

Code: Select all
(defvar default-voice-priority-list
  '(JuntaDeAndalucia_es_sf_diphone
    kal_diphone
    cmu_us_bdl_arctic_hts
    cmu_us_jmk_arctic_hts
    cmu_us_slt_arctic_hts
    cmu_us_awb_arctic_hts
;    cstr_rpx_nina_multisyn       ; restricted license (lexicon)
;    cstr_rpx_jon_multisyn       ; restricted license (lexicon)
;    cstr_edi_awb_arctic_multisyn ; restricted license (lexicon)
;    cstr_us_awb_arctic_multisyn
    ked_diphone
    don_diphone
    rab_diphone
    en1_mbrola
    us1_mbrola
    us2_mbrola
    us3_mbrola
    gsw_diphone  ;; not publically distributed
    el_diphone
    )
  "default-voice-priority-list
   List of voice names. The first of them available becomes
   the default voice.")

Ponemos a Silvia la primera 'JuntaDeAndalucia_es_sf_diphone' y lo tenemos listo para probar a leer un documento.

Code: Select all
pi@raspberrypi ~ $ festival --language spanish --tts /home/pi/Desktop/Spanish.txt

Para cambiar la voz por defecto de todos los idiomas se cambia en su archivo correspondiente:

Code: Select all
language_american_english.scm    language_italian.scm
language_british_english.scm     language_russian.scm
language_castillian_spanish.scm  language_scots_gaelic.scm
language_czech.scm               language_welsh.scm
language_finnish.scm

Bueno ahora que sabemos un poco mas sobre como funciona festival Vamos a instalar un par de voces con mejor calidad para ingles usaremos las voces de mbrola yo instalare solo us1 y en1 pero se pueden probar más por su cuenta. seguir los pasos introducir los comandos uno a uno para instalar estas dos voces. Si vienes siguiendo el manual estarás en el directorio /usr/share/festival/languages vamos a crear un directorio de trabajo mbrola dentro del directorio tmp y trabajaremos ahí.

Code: Select all
mkdir /tmp/mbrola

cd /tmp/mbrola

wget http://www.tcts.fpms.ac.be/synthesis/mbrola/bin/raspberri_pi/mbrola.tgz

wget http://tcts.fpms.ac.be/synthesis/mbrola/dba/us1/us1-980512.zip

wget http://tcts.fpms.ac.be/synthesis/mbrola/dba/en1/en1-980910.zip

tar -xzvf mbrola.tgz

sudo mv mbrola /usr/bin

rm mbrola.tgz

unzip us1-980512.zip

unzip en1-980910.zip

sudo mkdir -p /usr/share/festival/voices/english/us1_mbrola/

sudo mkdir -p /usr/share/festival/voices/english/en1_mbrola/

sudo mv us1 /usr/share/festival/voices/english/us1_mbrola/

sudo mv en1 /usr/share/festival/voices/english/en1_mbrola/

wget http://www.festvox.org/packed/festival/1.96/festvox_us1.tar.gz

tar -xzvf festvox_us1.tar.gz

sudo mv festival/lib/voices/english/us1_mbrola/* /usr/share/festival/voices/english/us1_mbrola/

wget http://www.festvox.org/packed/festival/1.95/festvox_en1.tar.gz

tar -xzvf festvox_en1.tar.gz

sudo mv festival/lib/voices/english/en1_mbrola/* /usr/share/festival/voices/english/en1_mbrola/

rm festvox_en1.tar.gz

rm -rf festival

Podemos hacer un script para cada idioma y que Festival lea por nosotros en diferentes idiomas con tan solo sombrear el texto y pulsar un atajo de teclado. Para leer un texto que sombreamos en un documento o en Internet y dejar que festival lo lea por nosotros vamos a usar xsel. Pero antes salimos del directorio /tmp/mbrola.

Code: Select all
cd


Creamos un script con nombre talk.sh para leer en Ingles nuestro directorio de usuario.
Code: Select all
sudo apt-get install xsel


Code: Select all
cat << eof > talk.sh
#!/bin/bash
xsel | festival --tts --pipe
eof

Le damos permisos ara ejecutar con.

Code: Select all
chmod +x talk.sh

Creamos otro script con nombre hablar.sh para leer en Español con soporte para tildes y Ñ entre otros:

Code: Select all
cat << eof > hablar.sh
#!/bin/bash
xsel | iconv -f utf-8 -t iso-8859-1 | festival --language spanish --tts --pipe
eof

Le damos permisos ara ejecutar con.

Code: Select all
chmod +x hablar.sh

Ahora tenemos que gestionar los accesos directos. En Raspbian esto se hace mediante la edición de '~/.config/openbox/lxde-pi-rc.xml'

Code: Select all
sudo gedit ~/.config/openbox/lxde-pi-rc.xml

Bajo la etiqueta:

Code: Select all
  <keyboard>
    <chainQuitKey>C-g</chainQuitKey>

Hay que añadir estos atajos de teclado:

Code: Select all
    <chainQuitKey>C-g</chainQuitKey>
    <!-- Keybindings for festival -->
   <!-- Read text English -->
    <keybind key="C-comma">
      <action name="Execute">
       <execute>/home/pi/talk.sh</execute>
      </action>
    </keybind>
   <!-- Read text Spanish -->
    <keybind key="C-period">
      <action name="Execute">
       <execute>/home/pi/hablar.sh</execute>
      </action>
    </keybind>

Guardamos y cerramos el archivo, Esta echo para leer ingles pulsando Control + Punto y para Español Control + coma.

COMANDOS FESTIVAL DESDE DENTRO.

LANZAR FESTIVAL:

hiddenotebook@rules:~$ festival

APAGAR/QUITAR:

festival> (quit)

VER LISTA DE VOCES:

festival> (voice.list)

CAMBIAR VOZ:

festival> (voice_el_diphone)

HABLAR POR TERMINAL:

festival> (SayText "Aquí lo que quieres que lea")

------------------------------------------------------

COMANDOS FESTIVAL DESDE FUERA.

CREAR DOCUMENTO Y ESCRIBIR EN EL DESDE: /home/usuario:

touch NuevoDocumento
echo "Texto a escribir" > NuevoDocumento

PARA LEER UN DOCUMENTO EN ESPAÑOL: "Este lee acentos y Ñ correctamente"

less NuevoDocumento|iconv -f utf-8 -t iso-8859-1|festival --tts

PARA LEER DOCUMENTOS EN DIFERENTES IDIOMAS.

festival --language english --tts /home/pi/Desktop/NuevoDocumento
festival --language american_english --tts /home/pi/Desktop/NuevoDocumento
festival --language spanish --tts /home/pi/Desktop/NuevoDocumento

SI DA ERROR VER Cambiar Voz Por Defecto explicado de este manual.
Last edited by hiddenotebook on Sun Oct 09, 2016 4:04 pm, edited 7 times in total.
User avatar
Posts: 67
Joined: Fri Oct 02, 2015 7:52 pm
by actkk2000 » Thu Oct 15, 2015 6:11 pm
Gracias! :)

Slds!
Robot +Camara +Sensores +Encoder +Servo +Matriz8x8 +Joystick:
https://www.raspberrypi.org/forums/viewtopic.php?f=76&t=130470
User avatar
Posts: 1309
Joined: Wed Apr 02, 2014 3:22 am
by hiddenotebook » Fri Oct 16, 2015 8:14 am
Gracias a ti por comentar compañero.
User avatar
Posts: 67
Joined: Fri Oct 02, 2015 7:52 pm
by hiddenotebook » Tue Oct 27, 2015 11:06 am
Actualizado 27/10/2015
User avatar
Posts: 67
Joined: Fri Oct 02, 2015 7:52 pm
by cpcbegin » Wed Jul 13, 2016 3:47 am
Excelente manual pero los enlaces para descargar las voces de la Junta de Andalucía ya no son válidos pues trasladaron los contenidos de la antigua forja a github (Proyecto Hispavoces).
Estos son los nuevos enlaces:
- Voz masculina.
- Voz femenina.

Un saludo y gracias por compartir.
Trucos y recetas para raspberry pi:
http://malagaoriginal.blogspot.com.es/search/label/raspberry%20pi
User avatar
Posts: 178
Joined: Sun Mar 08, 2015 3:48 pm
Location: Costa del Sol, Spain
by inforservice » Wed Jul 13, 2016 11:12 pm
Gracias! todo muy detallado y util ;)
Posts: 36
Joined: Tue Jun 21, 2016 8:54 am
by hiddenotebook » Sat Aug 27, 2016 4:13 am
Gracias por las voces @cpcbegin.

En raspberry con buscar en apt ya se pueden instalar voces mbrola no hace falta seguir todos los pasos que pongo al final de la guia con un simple:

apt-get install festvox-us1

Es suficiente, Un saludo.

¿Nadie tiene mas trucos para festival?

El otro dia hice un script para que pare de hablar con un atajo de teclado cuando pille el PC lo comparto. El que ha probado festival sabe de que hablo porque como le hagas leer mucho texto y quieras parar...
User avatar
Posts: 67
Joined: Fri Oct 02, 2015 7:52 pm
by hiddenotebook » Sat Sep 10, 2016 11:37 pm
Actualizo el post con esta voz que es de lo mejor que hay habla claro y parece la voz de un pivon :D
Es en ingles pero merece la pena sobre todo si lo usas como yo para aprender más. Tengo mas voces si quieren mas solo tienen que pedir.

Creamos el directorio para el trabajo:

Code: Select all
mkdir myvoice 
cd myvoice 


Descargamos al pivon Alice:

Code: Select all
wget http://www.speech.cs.cmu.edu/cmu_arctic/packed/cmu_us_slt_arctic-0.95-release.tar.bz2 


La extraemos:

Code: Select all
tar xf cmu_us_slt_arctic-0.95-release.tar.bz2


La movemos a festival. cuidado tienes que cambiar el nombre y añadir el sufijo _clunits si no no funciona.

Code: Select all
sudo mv cmu_us_slt_arctic /usr/share/festival/voices/english/cmu_us_slt_arctic_clunits 



Seguro que quieres hacerla tu voz por defecto. en /etc/festival.scm añade esto en una nueva linea al final.

Code: Select all
(set! voice_default 'voice_cmu_us_slt_arctic_clunits) 


Ejecuta festival:

Code: Select all
festival


Y prueba la voz:

Code: Select all
(SayText "Hello I am Alice. hot and nice. This is a short introduction test.")
User avatar
Posts: 67
Joined: Fri Oct 02, 2015 7:52 pm