Acerca de

Muchos de los tutoriales que tengo en mi blog los he creado con el fin de que sean útiles y didácticos; mi idea es compartir el conocimiento obtengo al trabajar con y vivir del FOSS.

Por que el ajonjolí? de muy pequeño mis principales fuentes de conocimiento eran Plaza Sésamo (o ajonjolí) y mi NES (nintendo no me pareció tan razonable para el nombre del dominio, ademas está registrado desde 1998 ;-) ); este nombre simboliza la fuente de conocimiento.

Instalación y uso de Cepstral en Elastix

Cepstral es un sistema de sintetización de voz (texto a voz) con paquetes de voces muy superiores a los que se encuentran (Gratis) para Festival esto lo hace ideal para soluciones empresariales.
Uno de los puntos en contra es que se debe pagar licencias por cada voz que se desee usar, además de los canales concurrentes que se utilizaran.

En lo personal prefiero Festival, y se que hay paquetes de voces profesionales para festival que también se pueden adquirir.
Pero bueno, luego haré un instructivo para Festival, ahora nos vamos a concentrar en hacer andar Cepstral.

El primer paso es descargar las voces que vamos a usar desde: http://www.cepstral.com/downloads/.
Luego de esto extraemos las voces donde queramos en el servidor y ejecutamos en la carpeta extraída el comando # ./install.sh .
Eso hacemos por cada una de las voces que hayamos adquirido o queramos probar.

Bueno la instalación de cepstral no tiene mucha ciencia, al igual que registrar la(s) licencia(s).

Una vez instalado, necesitamos una forma de hacerlo funcionar, aqui explico 2 formas para usarlo desde Asterisk:

  • Usar el modulo app_swift para Asterisk.
  • Usar un Script AGI para convertir el texto en un archivo wav y reproducirlo

Usando aplicación app_swift

Para usar el primer método, necesitamos descargar el modulo app_swift de aqui según la versión de Asterisk que estemos usando, Asterisk 1.4 para Elastix 1.6.X y Asterisk 1.6 para Elastix 2.0.X.

Para compilar, solo extraemos el contenido del paquete y ejecutamos make y luego make install.
Si estamos usando la versión de 64 bits de Elastix, debemos editar el archivo Makefile y corregir la variable MODULES_DIR en el script para que apunte a /usr/lib64/asterisk/modules en vez de /usr/lib/asterisk/modules.

Luego cargamos las librerias de swift para que esten disponibles en el sistema y puedan ser leidas por asterisk:
# echo "/opt/swift/lib" > /etc/ld.so.conf.d/swift.conf
Luego refrescamos el cache de librerias con el comando:
# ldconfig -v

ACTUALIZACION:
existe un bug en la versión 2.0 de app_swift para lo cual hay un parche aquí. También puede ver el hilo donde se publicó el parche.

Ahora solo reiniciamos Asterisk (o ponemos el comando rasterisk -x "module load app_swift.so") y debe cargar ya el modulo app_swift.
Con esta aplicación podemos hacer texto a voz muy fácil desde el plan de marcado, aquí un ejemplo:

exten => 200,1,Answer()
exten => 200,n,Wait(1)
exten => 200,n,Swift(Esta es una prueba de texto a voz desde elastix)
exten => 200,n,hangup()

Podemos afinar el comportamiento del modulo y cambiar sus opciones (por ejemplo el lenguaje por defecto) en el archivo /etc/asterisk/swift.conf

Usando un Script AGI

También podemos usar un AGI para ejcutar el comando swift, generar un archivo wav y reproducirlo.
Para esto he adjuntado un Script AGI (swift.agi.tar) que debemos poner en /var/lib/asterisk/agi-bin/. Este script recibe como argumento el texto que queremos reproducir, para llamarlo desde plan de marcado seria algo asi:

exten => 100,1,Answer()
exten => 100,n,Wait(2)
exten => 100,n,AGI(swift.agi, "Esta es una prueba de texto a voz desde elastix")
exten => 100,n,hangup()

Es posible que tengamos que hacer algunos ajustes al script, por elemplo cambiar la voz adecuada segun las que tenemos disponibles en el sistema, eso seria cambiando en la linea 19 del script donde se indica:
/usr/local/bin/swift -n NOMBRE DE LA VOZ -o /tmp/$agi_uniqueid.wav -p audio/channels=1,audio/sampling-rate=8000 " $texto "

Teambien es posible que hayan problemas con los acentos al usar el script, para eso podemos editarlo y poner la codificacion de caracteres que vamos a usar al llamar el comando swft, pensaria que basta con cambiar a UTF-8, es decir, cambiar la siguiente linea en el script agi:
/usr/local/bin/swift -n Miguel-8kHz -o /tmp/$agi_uniqueid.wav -p audio/channels=1,audio/sampling-rate=8000 " $texto "
y poner la codificacion como se muestra a continuacion:
/usr/local/bin/swift -n Miguel-8kHz -e utf-8 -o /tmp/$agi_uniqueid.wav -p audio/channels=1,audio/sampling-rate=8000 " $texto "

Esas son las dos formas de usar Cepstral en Elastix.
Yo recomiendo usar el script agi, app_swift no me ha dado buen resultado en aplicaciones complejas.