Voces de Mbrola y Asterisk

Una de las ventajas del uso de la plataforma de comunicaciones Asterisk PBX es el desarrollo de aplicaciones que permitan interactuar con bases de datos para leer información con base a una consulta introducida por voz o desde el teclado de un teléfono y regresar la información hablada a través de un robot.


Actualmente existen múltiples sintetizadores de voz comerciales y open source, en el lado open source esta festival el cuál tiene voces en diferentes idiomas aunque se distingue la calidad robotizada de la voz, por otra parte existen versiones comerciales como son LumenVox, Cepstral, Loquendo, verbio, etc., que tienen voces en diversos idiomas aunque el costo de la licencia por canal de voz va de los 100 dólares en adelante, aunque dependiendo del proyecto a la larga puede ser una cifra muy bien justificada y asequible.


En el lado Open Source existen unas voces con una calidad muy aceptable llamada MBROLA, la cual incluye voces en español, inglés, italiano, francés, etc.


Actualmente existen versiones en inglés de MBROLA que pueden ser usadas junto con la plataforma de festival y a través de esta ser implementadas en Asterisk PBX para dar respuestas e voz automatizadas con una voz aceptable.


Aunque el desarrollo de los wrappers de MBROLA son solo para voces en Inglés, esto no impide que se puedan usar otras voces desde las famosas AGIs de Asterisk y desarrollar aplicaciones de voz.


En este caso al no tener los wrappers de voces en español implementamos un pequeño código que nos permitió desde cualquier AGI de Asterisk PBX usar las voces en español de MBROLA.


Primero se instaló la versión de MBROLA, las voces en español de mbrola, la utilería espeak y ffmpeg.


Actualmente se puede conseguir MBROLA y los paquetes de voz en español de mbrola-es1, mbrola-es2, mbrola-mx2 y mbrola-vz1 en internet para diversas distribuciones de Linux.


espeak permite generar un archivo de audio con base a un texto a través de mbrola


ffmpeg permite convertir ese archivo de audio a un formato legible por Asterisk PBX: WAV, PCM 16 Bits 8000 Hertz Mono.


Este es un codigo ejemplo de como usar mbrola, espeak, ffmpeg y phpagi en un AGI para Asterisk con PHP.
 
//generamos un nombre único temporal para el archivo de audio a generar
$archivo = md5(date("ymdhis"));
//desde el AGI llamamos a una aplicación externa que convierte un texto a un audio en el archivo indicado.
 exec("espeak -s 160 -p 60 -v mb-vz1 \"$TextoAConvertirAVoz\" -w /var/lib/asterisk/sounds/custom/$archivo.wav");
//Con ffmpeg convertimos el archivo al formato WAV permitido por Asterisk PBX
exec(" ffmpeg -i /var/lib/asterisk/sounds/custom/$archivo.wav -ar 8000 -ac 1 -ab 64  /var/lib/asterisk/sounds/custom/8000_$archivo.wav -ar 8000 -ac 1 -ab 64 -f mulaw ");
//Ejecutamos el comando background de Asterisk a través de la función Exec de phpagi y reproducimos el archivo generado
$agi->exec('background', "custom/8000_$archivo");
//borramos los archivos temporales de audio  generados
 


Y con esto podemos tener una aplicación de texto a voz usando el TTS de MBROLA, con esto tenemos voces con mejor calidad que las voces de Festival sin pagar licencias por x canales de voz requeridos.


Pueden obtener más voces para MBROLA en la siguiente URL:



http://www.tcts.fpms.ac.be/synthesis/mbrola/mbrcopybin.html


Emblems