Integracion de un sistema de TTS (Text to Speech) en Asterisk - Cepstral

Actualizado 11 Septiembre 2009

Un programa TTS (Text to Speech), entre otras cosas, transforma un texto en voz. En el caso de Asterisk esto es posible usando Festival.  Para que el modulo venga correctamente instalado, antes de compilar asterisk tenemos que instalar el programa y sus fuentes.

yum install festival festival-devel

Compilamos y ya. No se si alguien logró alcanzar un nivel de síntesis vocal bueno. Yo la verdad no. Es por eso que preferí probar Cepstral, otro sistema de TTS que se puede integrar en asterisk (versión 1.4 y 1.6) gracias a un modulo dedicado. Antes que nada hay que decir que Cepstral no es un programa gratuito y que cada voz cuesta 29,99 dólares. El modulo para la integración de Cepstral en Asterisk lo escribió y lo actualiza Darren Sessions.

Primero descargamos una voz de prueba en el sitio de Cepstral (en mi caso para Linux 64bit)

cd /opt

wget http://downloads.cepstral.com/cepstral/x86-64-linux/Cepstral_Marta-8kHz_...

La descomprimimos

tar -xf Cepstral_Marta-8kHz_x86-64-linux_5.1.0.tar.gz

y la instalamos

cd Cepstral_Marta-8kHz_x86-64-linux_5.1.0

./install.sh

Aceptamos la licencia, escogemos la carpeta /opt/swift para la instalación y confirmamos los datos.

Ahora tenemos que decirle a Linux donde buscar las librerías del programa. abrimos el archivo ld.so.conf

nano /etc/ld.so.conf

añadimos una línea

/opt/swift/lib

Guardamos y actualizamos

ldconfig -v

Listo. Ahora tenemos que instalar el modulo para asterisk

cd /usr/src

Para asterisk 1.4.X

wget http://www.voztovoice.org/tmp/app_swift-1.4.2.tar.gz

Para Asterisk 1.6.X

wget http://www.voztovoice.org/tmp/app_swift-1.6.2.tar.gz

lo descomprimimos

tar -xf app_swift-1.6.2.tar.gz

Entramos en la carpeta:

cd app_swift-1.6.2

compilamos y instalamos

make

make install

Paramos y volvemos a arrancar asterisk

/etc/init.d/asterisk stop

/etc/init.d/asterisk start

y averiguamos que el modulo esté cargado

asterisk -rvvvvvvvvvvv

CLI> module show like app_s

Module                         Description                              Use Count
app_sayunixtime.so               Say time                                 0
app_sendtext.so                    Send Text Applications                   0
app_senddtmf.so                   Send DTMF digits Application             0
app_swift.so                         Cepstral Swift TTS Application           0
app_setcallerid.so                 Set CallerID Presentation Application    0
app_system.so                      Generic System() application             0
app_softhangup.so               Hangs up the requested channel           0
app_saycountpl.so               Say polish counting words                0
app_sms.so                          SMS/PSTN handler                         0
app_speech_utils.so            Dialplan Speech Applications             0
app_stack.so                       Dialplan subroutines (Gosub, Return, etc 0
11 modules loaded

La sinopsis del comando

CLI> core show application swift

  -= Info about application 'Swift' =-

[Synopsis]
Speak text through Swift text-to-speech engine.

[Description]
Syntax: Swift(text[|timeout in ms|maximum digits])
Example: Swift(Hello World|5000|5) = 5 second delay between 5 digits
This application operates in two modes. One is processing text-to-speech while
listening for DTMF and the other just processes the text-to-speech while ignoring
DTMF entirely.
Unless the timeout and maximum digits options are BOTH specified, the application
will automatically ignore DTMF.
Returns -1 on hangup or 0 otherwise.

salimos de la consola:

CLI> quit

En la carpeta donde están los archivos de configuración de asterisk encontraremos un nuevo archivo: swift.conf. Tenemos que modificarlo para terminar la integración de Cepstral en Asterisk

nano /etc/asterisk/swift.conf

[general]

buffer_size=65535

goto_exten=yes

voice=Marta-8kHz

Guardamos los cambios y actualizamos asterisk

/etc/init.d/asterisk reload

Quitamos y volvemos a cargar el modulo (por las moscas)

asterisk -rvvvvvvvvvvvvvvvvvvvvvv

*CLI> module unload app_swift
  == Unregistered application 'Swift'

CLI> module load app_swift
  == Registered application 'Swift'
  == Parsing '/etc/asterisk/swift.conf':   == Found
[Oct 25 17:05:15] DEBUG[11038]: app_swift.c:545 load_module: Config buffer_size is 65535
[Oct 25 17:05:15] DEBUG[11038]: app_swift.c:552 load_module: Config goto_exten is 1
[Oct 25 17:05:15] DEBUG[11038]: app_swift.c:557 load_module: Config voice is Miguel-8kHz
Loaded app_swift => (Cepstral Swift TTS Application)

Salimos de la consola:

CLI> quit

Ahora probamos la instalación en nuestra centralita. Creamos estas líneas en extension.conf (en el contexto donde llegan todas las llamadas externas)

nano /etc/asterisk/extensions.conf

exten => s,1,Answer()
exten => s,n,Playback(welcome)
exten => s,n,Swift(En el centro de comunicaciones de VoztoVoice. Espere mientras lo conectamos con una operadora)
exten => s,n,Wait(2)

exten => s,n,Hangup

Guardamos y actualizamos el dialplan

asterisk -rvvvvvvvv

CLI> dialplan reload

Ahora desde su softphone hagan sus pruebas y me comentan.

Comentarios

Hola.

Has probado Verbio?

El reconocimiento de voz y sus locutores son muy buenos. Eso sí, no es gratuito.

No lo he probado todavía.

Si me regalan una demo prometo probarlo :)

Chao

Ante todo muchas gracias por el tutorial. Estaba intentando seguirlo pero cuando llego a la parte de compilar el app_swift me tira muchisimos errores del tipo "/usr/include/string.h:67: error: declaration for parameter âmemchrâ but no such parameter"

Pareceria como si me faltase instalar el source de "algo" :)

Saludos,
AiZ

Hola,

en el Makefile de la carpeta app_swift aparecen estas lineas:

SWIFT_DIR=/opt/swift
CFLAGS=-I${SWIFT_DIR}/include -g -Wall -D_REENTRANT -D_GNU_SOURCE -fPIC
LDFLAGS=-L${SWIFT_DIR}/lib -lswift -lm -lswift $(patsubst ${SWIFT_DIR}/lib/lib%.so,-l%,$(wildcard ${SWIFT_DIR}/lib/libcep*.so))
SOLINK=-shared -Xlinker -x

Al compilar el programa busca en la carpeta /opt/swift/include y /opt/swift/lib.

Si tienes las carpeta configuradas bien mira si tienes instalado el paquete gcc-c++ (en Centos)

yum install gcc-c++

Si esto tampoco te funcionara intenta instalar bison:

yum install bison bison-devel

Si tampoco te funciona copia y pega la linea 67 del archivo /usr/include/string.h

Seria mejor saber:
- Distribucion Linux
- Version Asterisk
- Version Cepstral

Chao

Engo instaldo el centos 5.3 y el asterisk 1.6.1.6

al ejecutar el make app_swit.c obtengo estos errores

[root@rex-ast-01 app_swift-1.6.2]# make
gcc -I/opt/swift/include -g -Wall -D_REENTRANT -D_GNU_SOURCE -fPIC -c -o app_swift.o app_swift.c
app_swift.c: In function ‘engine’:
app_swift.c:396: error: incompatible types in assignment
app_swift.c: In function ‘load_module’:
app_swift.c:540: error: ‘AST_MODULE’ undeclared (first use in this function)
app_swift.c:540: error: (Each undeclared identifier is reported only once
app_swift.c:540: error: for each function it appears in.)
make: *** [app_swift.o] Error 1

Tines alguna idea , como solucionar esto?

Saludos!
Jesus

Controla che tenga esta linea en este archivo:

nano /etc/ld.so.conf

la linea es:

/opt/swift/lib

Guarda los cambios y escribe el comando:

ldconfig -v

Luego intenta compilar otra vez app_swift

Cuéntame

Si tenia la linea en el ld.so.conf
ejecute el ldconfig -v

y luego el make , y sigue arrojando el mismo error.

La verdad me parece muy raro. Creo que es mejor que visites la pagina del desarrollador del modulo para ver si hay actualizaciones.
Chao

SI esta raro, la página esta offline, pero ay le mande un correo.

Aunque me gustaria utilizar el modulo aap_swift.
Ya lo solucione por medio de AGI.

http://www.voip-info.org/wiki/view/swift.agi

○ Install agi Script
§ Copy swift.agi to /var/lib/asterisk/agi-bin
§ Change permission
□ chown -v asterisk:asterisk /var/lib/asterisk/agi-bin/swift.agi
□ chmod -v 755 /var/lib/asterisk/agi-bin/swift.agi
○ Dialplan Example
§ exten => 511,1,Answer
§ exten => 511,2,Wait(1)
§ exten => 511,3,agi(swift.agi, Esto es una prueba)
§ exten => 511,4,Hangup

Saludos y Gracias!

Hola a todos !

Aquí os dejo el enlace de un parche para compilar app_swift

http://jeremy.kister.net/code/app_swift-1.6.2.patch

Un saludo

A mi se me resolvio esto instalando el asterisk devel
yum install asterisk-devel

Hola a todos, llevo dos días navegando buscando una solucón que me convezca para lo que quiero hacer y me he topado con este post, de entrada decir que ni conocía Asterisk, pero me parece muy muy interesante. Al lío:

 

Lo que busco es un motor de TTS para a través de mi web enviarle texto  y que responda con un archivo de audio para el usuario en cuestión que esté visitando la página, busco algo que pueda usar sin limitaciones (sería una web gratuita y sin fines comerciales). Podría utilizar Asterisk para ello? Implica mucho trabajo de desarrollo?

Gracias por adelantado, necesito alguien que sepa sobre el tema para que me pueda dar un par de apuntes sobre el tema. Ya que por internet es complicado de buscar debido a que hay muchos tipos de servicios de TTS, pero no acabo de encontrar lo que me haría falta para mi aplicación.

 

Un saludo

Hola quisiera saber si se puede configurar festival para que atravez de una IVR el usuario pueda obtener informacion de una base de datos

Hola,

se puede hacer perfectamente. Mira este articulo: http://www.voztovoice.org/?q=node/187

en lugar de Flite pones Festival

Saludos

PicoTTS es de codigo abierto y no habla mal del todo.

Yo lo estoy utilizando y estoy contento con el.

Para simplificar, hay una aplicación compatible en formato con app_swft.

https://github.com/rampa069/app_picotts

andrea podrias recomendarme un buen tts comercial para asterisk.

Gracias anticipadas.

Hola,

cepstral no está mal y lo puedes probar en forma limitada antes de comprar la licencia. Existe un modulo para integrarlo con Asterisk, hasta la versión 11.

La verdad no conozco más.

Saludos