Instalar y configurar Festival en Asterisk 1.6.X

Actualizado 12 Septiembre 2009

Como muchos de ustedes saben Festival en un TTS, es decir un sistema de síntesis de voz. Para que lo necesitamos en Asterisk? Si queremos crear menú de voz, saludos de bienvenida, leer archivos de texto, entonces si que lo necesitamos.

Para que Festival se integre en asterisk, antes de compilar la centralita tenemos que instalar dos paquetes:

yum install festival festival-devel

para averiguar que el modulo de festival esté correctamente cargado en asterisk, desde la consola de la centralita:

asterisk -rvvvvvvvvvvvvvvv

CLI> module unload app_festival
  == Unregistered application 'Festival'

CLI> module load app_festival
 == Parsing '/etc/asterisk/festival.conf':   == Found
== Registered application 'Festival'
Loaded app_festival => (Simple Festival Interface)

Si aparece algún tipo de error significa que el modulo no ha sido compilado y tenemos que volver a la compilación de Asterisk.

Festival viene con predefinido el idioma ingles. Para agregarle el idioma español hay que seguir estos pasos:

cd /usr/share/festival/voices

wget http://www.voztovoice.org/tmp/festival-spanish.zip

yum install unzip

unzip festival-spanish.zip

Ahora modificamos el archivo de configuración de festival

nano /usr/share/festival/festival.scm

añadimos estas líneas

;(language__spanish)
(set! voice_default 'voice_el_diphone)

    (define (tts_textasterisk string mode)
    "(tts_textasterisk STRING MODE)
    Apply tts to STRING. This function is specifically designed for
    use in server mode so a single function call may synthesize the string.
    This function name may be added to the server safe functions."
    (let ((wholeutt (utt.synth (eval (list 'Utterance 'Text string)))))
    (utt.wave.resample wholeutt 8000)
    (utt.wave.rescale wholeutt 5)
    (utt.send.wave.client wholeutt)))

Guardamos el archivo y modificamos el archivo de configuración de festival en asterisk:

nano /etc/asterisk/festival.conf

estas son la líneas que hay que modificar/activar

[general]
host=localhost
port=1314
festivalcommand=(tts_textasterisk "%s" 'file)(quit)\n

Guardamos el archivo Ctrl-O Ctrl-X

Reiniciamos asterisk

/etc/init.d/asterisk reload

Para arrancar el servidor de Festival en automático ponemos esta línea en el archivo rc.local

nano /etc/rc.local

/usr/bin/festival_server

Ahora reiniciamos el servidor linux

reboot

Controlamos que el servidor festival esté corriendo:

 

Ahora vamos a añadir unas cuantas líneas en extensions.conf

nano /etc/asterisk/extensions.conf

exten => 650,1,Answer()
exten => 650,n,Festival(Asterisk y Festival trabajan junto. Chevere!!!)
exten => 650,n,Hangup()

Actualizamos el dialplan desde la consola

asterisk -rvvvvvvvvvvvvvvvvv

CLI> dialplan reload

Listo! Ahora desde un softphone conectado a la centralita marcamos la extensión 650. Escucharon algo? Si? Pues funcionaaaaa :)

Agradezco lo autores de este articulo que usé como guía.

Un saludo

Technorati Tag: ,,

Vota el Articulo: 

Sin votos (todavía)
Evalúa la calidad del articulo

26 comentarios

Otra pregunta

Hay alguna forma de cambiar el acento es que es como muy españolete, si tuvieras uno diferente con un acento mucho mas neutro, por ejemplo uno Colombiano, pero gratis, porque he buscado y los de Loquendo son excelentes pero son muy pesados y costosos, ademas que la configuración es diferente te agradecería si me puedes colaborar con una nueva voz.
Gracias.

No me anduvo

Hola, que tal.

Te cuento que hice todo tal cual esta especificado y no me funciona.

EL cli me muestra:

-- Executing [650@from-internal:1] Answer("SIP/1000-089a1140", "") in new stack
-- Executing [650@from-internal:2] Festival("SIP/1000-089a1140", "Asterisk y Festival trabajan junto. Chevere!!!") in new stack
== Parsing '/etc/asterisk/festival.conf': == Found

y queda ahi, no me muestra mas nada. Tengo el debug, notice, verbose, warning, error habilitado en el cli.

Mientras que el servidor festival me muestra:

[root@isb177 asterisk-addons-1.6.0.3]# festival --server
server Wed Sep 23 13:30:02 2009 : Festival server started on port 1314
client(1) Wed Sep 23 13:30:10 2009 : accepted from localhost
client(1) Wed Sep 23 13:30:10 2009 : disconnected

Agradezco mucho la ayuda, saludos

Festival y Asterisk

Por lo que veo en los registros todo funciona bien. No hay ningun error.

¿No puedes escuchar la voz?

Haz una prueba. Cambia la frase y pon una en ingles. Recarga el dialplan y mira si la escuchas.

Si asi fuera tienes un error en la configuracion de la voz española.

Chao

Probe y tampoco

Probe y tampoco funciona...
Ademas la llamada queda colgada, o sea, ejecuta la linea Answer(), luego Festival(lo que sea), pero nunca llega al Hungup(), el canal queda activo indefinidamente...

No se por donde puede venir el tema....

Re: Probé y tampoco

Intenta arrancar el server con esta opción:

/usr/bin/festival_server -show

y mira si te sale algun error. Si sale:

./festival_server: line 73: 3: Bad file descriptor

Edita el archivo festival_server y comenta la linea 73 con un #

Una solucion un poco chapuza pero a mi en otro servidor me funcionó.

Cuentame

Lo volvi a instalar en otra

Lo volvi a instalar en otra maquina a la cual despues le puse asterisk y me quedo funcionando.
Muchas gracias por la ayuda!
Saludos

Tengo exactamente el mismo problema...

Despues de "ejecutar" la linea correspondiente a Festival (que no reproduce nada) nunca llega al Hangup.

Segun tus indicaciones intenté ejecutar /usr/bin/festival_server -show, pero la respuesta es: "/usr/bin/festival_server: No existe el fichero ó directorio". En el directorio /usr/bin solo poseo festival y festival_client

No tengo la posibilidad de probar en otra máquina como hizo el otro amigo, pues esta maquina es de produccion y tengo que hacerla funcionar o funcionar, jeje.

A propósito, ¿como levanto permanente el servidor de Festival para no tener que ejecutar cada vez el comando "festival --server" cada que voy a procesar una llamada con festival?

Gracias.

edoardo_or

festival

Parece que no tienes instalado el server de festival. En CentOS los paquetes son:

festival.i386 : A free speech synthesizer
festival-devel.i386 : Development files for the festival speech synthesizer

Una vez que lo tenga instalado pruebalo y si no funciona usa el comando:

/usr/bin/festival_server -show

para arrancarlo en automatico (en CentOS) yo encontré este script (que en mi caso funciona):

#!/bin/sh
# Begin $rc_base/init.d/

# Based on sysklogd script from LFS-3.1 and earlier.
# Rewritten by Gerard Beekmans - gerard@linuxfromscratch.org

### . /etc/sysconfig/rc
#### . $rc_functions

case "$1" in
start)
echo "Starting Festival server"
/usr/bin/festival_server \
-l /tmp /usr/bin/festival \
2>/var/log/festival.err.log &
;;

stop)
echo "Stopping Festival"
ps -u root | grep "festival"
fest_proc=`ps -u root |\
grep "festival" |\
awk 'BEGIN { ORS = " "} {print $1}'`
echo "Killing processes $fest_proc"
for x in $fest_proc
do
kill -9 $x
done
;;
reload)
echo "Reloading..."
### reloadproc
;;

restart)
$0 stop
sleep 1
$0 start
;;

status)
### statusproc
;;

*)
echo "Usage: $0 {start|stop|reload|restart|status}"
exit 1
;;
esac

# End $rc_base/init.d/

No funcionó. Me muestra

No funcionó. Me muestra esto

[root@ns asterisk]# festival --server
socket: bind failed

Que puede ser?

Gracias de antemano.

El mismo problema

Hola que tal? he probado el tuto y al igual que los demas me da el mismo problema, me muestra lo siguiente:

-- Executing [5@mainmenu:1] Answer("SIP/100-00000000", "") in new stack
-- Executing [5@mainmenu:2] Festival("SIP/100-00000000", "how are you") in new stack
== Parsing '/etc/asterisk/festival.conf': == Found
localhost*CLI>

no se escucha nada y nunca llega al hangup, ademas la llamada se queda frizada :S

He hecho los cambios mencionados arriba y aun no me funca :(

alguien podria orientarme?

saludes

Re: festival, mismo problema

Prueba a cambiar la frase y ponla en español. Si lo tienes instalado en español, las frases en ingles no te funcionan porque no tiene la gramática instalada.

Ademas de eso controla que efectivamente el servidor festival esté corriendo. Esto aparece en mi servidor:

ps aux | grep festival

root 2197 0.0 0.1 4492 624 ? S Nov06 0:26 /bin/sh /usr/bin/festival_server -l /tmp /usr/bin/festival
root 2207 0.0 0.2 23632 800 ? S Nov06 0:00 /usr/bin/festival --server /tmp/festival_server.scm
root 676 0.0 0.0 0 0 ? Z Nov23 0:00 [festival]
root 2860 0.0 0.1 3920 704 pts/4 S+ 18:57 0:00 grep festival

Hola, gracias por tu

Hola, gracias por tu respuesta.

He probado con frases en ambos idiomas en español e ingles y ninguno de los dos me funciona, sucede lo mismo. Tabmbien he revisado que el servidor festival esté en ejecucion.

[root@localhost ~]# ps aux | grep festival
root 2333 0.0 0.1 4536 1184 ? S 02:36 0:00 /bin/sh /usr/bin/festival_server
root 2343 0.0 1.9 23332 20260 ? S 02:36 0:00 festival --server ./festival_server.scm
root 2397 0.0 0.0 3916 668 pts/0 R+ 02:42 0:00 grep festival

me gustaria saber si hay algun detalle por muy pequeño que sea el cual pueda ocacionar el problema.

En el log de festival me muestra lo siguiente:

[root@localhost ~]# tail -f festival_server.log
"Load server start ./festival_server.scm"
val server started on port 1314
client(1) Tue Nov 24 10:59:12 2009 : accepted from localhost
client(1) Tue Nov 24 10:59:12 2009 : disconnected
client(2) Tue Nov 24 11:01:23 2009 : accepted from localhost
client(2) Tue Nov 24 11:01:23 2009 : disconnected
client(3) Tue Nov 24 11:02:59 2009 : accepted from localhost
client(3) Tue Nov 24 11:02:59 2009 : disconnected

No se cual pueda ser el problema.

saludes

Re: festival

El servidor festival esta corriendo, la conexión entre Asterisk y el servidor funciona. Lo único que a estas alturas se me ocurre es que haya alguna linea en la configuración de festival que esté fallando.

Para el servidor festival y usa este comando para ver que te aparece:

/usr/bin/festival_server -show

Mira también si usando el script que aparece en unos de los comentarios para arrancar el servidor festival el problema se resuelve.
Chao

OK, ejecute

OK, ejecute /usr/bin/festival_server -show y me daba un error en la linea 73, la comente a como mencionaban arriba y lo ejecute de nuevo y todo bien, pero aun no funca aun ejecutandolo con el script de arriba :( ya he revisado bien paso a paso y no se me ocurre nada :S

Cualquier sugerencia es bienvenida.

saludes

Patch

Hola, tengo el mismo problema, realice el prache respetivo (para asterisk 1.6.2) pero aun asi no reproduce el sonido, he probado entrando a la consola de festival (digite (SayText "hola mundo")) y desde ahi se me reproduce el sonido pero cuando llamo desde una extension del asterisk no reproduce ningun sonido... hay alguna otra solucion a este problema??... gracias d antemano

Salu2

Solucion final

festival no funciona bien con asterisk 1.6 o instalas 1.4, tambien puesdes instalar primero festival y luego asterisk o tambien puedes hacerlo como yo de la siguiente manera,

debes dar permisos 777 a la carpeta sounds de asterisk y crear y dar permiso 777 a una llamada ivr que debe estar dentro de sounds y en extensions_custom.conf en el caso de elastix o extensions.conf en el caso de tribox, el siguiente contexto en las cualquier macro que indique llamada interna, en mi cao lo coloque en la primera macro del archivo:

exten => 650,1,Answer()
exten => 650,2,System(echo 'Hola Ya funciono esta mierda' > /var/lib/asterisk/sounds/visa/${UNIQUEID}.txt)
exten => 650,3,System(text2wave /var/lib/asterisk/sounds/ivr/${UNIQUEID}.txt -f 8000 -otype riff -o /var/lib/asterisk/sounds/visa/${UNIQUEID}.wav)
exten => 650,4,Playback(visa/${UNIQUEID})
exten => 650,5,System(rm -rf /var/lib/asterisk/sounds/ivr/${UNIQUEID}.*)
exten => 650,n,Hangup()

verifica este archivo

verifica este archivo /etc/asterisk/phpagi.conf si las rutas del text2wave no son estas que te puse abajo cambialas por estas.
Casi seguro que el directorio tmp no existe asi que crea uno con permiso 755 es suficiente
espero les se util.

#Editar el archivo /etc/asterisk/phpagi.conf y verifica que las rutas sean correctas
[festival]
#directorio donde se encuentra la aplicacion text2wave
text2wave=/usr/bin/text2wave
#directorio donde se colocaran los archivos temporales
tempdir=/var/lib/asterisk/sounds/tmp/
#Guardar el archivo

Festival corta el texto

Me funciono correctamente muchas gracias por tu ayuda. Tengo un problema que me corta el mensaje por ejemplo si coloco "Esta es una prueba de Festival con Asterisk y funciona correctamente valio la pena el trabajo". Se queda en "Esta es una prueba de Festiva con as..." se queda mudo y luego hace el hangup. Alguna sugerencia. Gracias.

un pequeño problema

Hola!.....veran, mi problema radica a la hora de iniciar el servidor.
Cuando ejecuto "festival --server" me sale este error.

unbound variable : voice_el_diphone
closing a file left open: /usr/share/festival/lib/init.scm
festival: fatal error exiting.

enserio necesito solucionar este problema aunque ya se que este tema es antiguo DX... ayudenme D:..Gracias

Suscribirse a Comentarios de "Instalar y configurar Festival en Asterisk 1.6.X" Suscribirse a VozToVoice - Todos los comentarios