Enviado por admin el
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
26 comentarios
Funciona perfecto
Enviado por Ivan Mauricio G... (no verificado) el
Muchas gracias funcionó perfecto!!!
Me alegra :)
Enviado por admin el
Me alegra mucho que todo te funciono.
Saludos.
Otra pregunta
Enviado por Ivan Mauricio G... (no verificado) el
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.
Que yo sepa no hay
Enviado por admin el
Hola Ivan,
que yo sepa no hay. A ver si alguien tiene más información.
Chao
No me anduvo
Enviado por Pablo Bernasconi (no verificado) el
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
Enviado por admin el
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
Enviado por Pablo Bernasconi (no verificado) el
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
Enviado por admin el
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
Enviado por Pablo Bernasconi (no verificado) el
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...
Enviado por edoardo_or el
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
Enviado por admin el
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
Enviado por Felix (no verificado) el
No funcionó. Me muestra esto
[root@ns asterisk]# festival --server
socket: bind failed
Que puede ser?
Gracias de antemano.
Re: Festival
Enviado por admin el
El comando para ver si todo funciona es:
festival_server --show
Porque usaste:
festival --server
Chao
El mismo problema
Enviado por Jose Blandon (no verificado) el
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
Enviado por admin el
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
Enviado por Jose Blandon (no verificado) el
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
Enviado por admin el
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
Enviado por Jose Blandon (no verificado) el
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
Re: OK ejecute
Enviado por admin el
A mi tampoco se me ocurre nada más.
Patch
Enviado por gmartinez (no verificado) el
Hola a todos, a mi me estaba pasando este mismo problema, y encontre la solucion aqui, espero que se util:
https://issues.asterisk.org/view.php?id=15706&nbn=2
Patch
Enviado por DaCoFer (no verificado) el
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
Enviado por jpxfd (no verificado) el
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
Enviado por guille (no verificado) el
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
Descarga del asterisk 1.6.x
Enviado por Esthefano (no verificado) el
De donde puedo descargarme la version del asterisk 1.6.x
Festival corta el texto
Enviado por Luis (no verificado) el
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
Enviado por Cristian (no verificado) el
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