Como convertir audio con sox compatible con Asterisk
En muchas ocasiones, necesitamos utilizar diferentes locuciones creadas por nosotros para nuestro Asterisk o bien un archivo creado por un locutor profesional que generalmente tiene una gran calidad de audio pero que no es compatible con Asterisk.
Asterisk soporta muchos tipos de archivos de audio, tan solo tienes que echarle un vistazo a la cantidad de módulos de formatos y codecs que puedes encontrar en el directorio /usr/lib/asterisk/modules y te darás cuenta que tienes bastantes disponibles. No obstante, siempre se recomienda utilizar un formato y un códec que evite cargar al sistema cada vez que se reproduzca.
Por ejemplo, si nuestro terminal IP utiliza códec Alaw, no es práctico que el archivo de audio se encuentre en GSM, ya que Asterisk tendrá que «traducir» el archivo codificado como ‘gsm’ a ‘alaw’ para que nuestro terminal pueda reproducirlo y nosotros escucharlo. Esto consume procesador y memoria que, multiplicado por el número de archivos que se pueden llegar a reproducir a la vez, pueden causar una carga excesiva y nada justificada.
Para evitar esto, se suelen convertir los archivos de audio al códec que vamos a utilizar: si nuestro teléfono está configurado como ‘alaw’, nuestra locución puede estar codificada en ‘alaw’ también y así evitar la conversión. Lo mismo ocurre si nuestro terminal utiliza ‘G.729’ (cuya trascodificación requiere de licencias) por lo que si convertimos las locuciones a G.729, además de ahorrarnos procesamiento del sistema, también nos ahorraremos utilizar las licencias del códec G.729 que tengamos.
Para convertir el audio de un formato a otro, la consola de Asterisk dispone de un comando que puede ayudarnos:
*CLI> help file convertUsage: file convert <file_in> <file_out>Convert from file_in to file_out.
If an absolute path is not given, the default Asterisk sounds directory will be used.Example:file convert tt-weasels.gsm tt-weasels.ulaw
Esta herramienta puede ser útil en muchos casos, aunque lo cierto es que no es todo lo buena que debería ser, ya que para convertir archivos en formato ‘wav’ deben estar con los parámetros estándar de audio para telefonía:
Signed 16 bits PCM
Big Endian
Mono
8000 Hz
Lo que puede llevarnos a necesitar alguna aplicación para convertir nuestro archivo ‘wav’ o ‘mp3’ a otro formato más compatible con Asterisk.
No obstante, en Linux disponemos de una herramienta fundamental que debe estar incluido en cualquier servidor de Asterisk: sox (http://sox.sourceforge.net/)
Esta herramienta (y más en sus últimas versiones) dispone de mejoras tanto de rendimiento como de calidad que la hacen una de las más útiles, fáciles y rápidas de todas las existentes y únicamente deberemos conocer qué parámetros debemos utilizar para convertir nuestro archivo a cualquier otro.
Pese a que la utilidad sox puede compilarse, también admite módulos lo que nos facilitará su instalación mediante los paquetes que provee nuestra distribución, algo sencillamente ideal cuando necesitamos algo rápido y fácil.
Una de las mayores ventajas, es que la extensión que utilicemos como ‘archivo de salida’ marcará la cabecera de esta, por lo que no tenemos que preocuparnos por indicar una gran parte de los detalles que incluyen los archivos de audio.
Por este motivo y para poder recordarlo en un futuro, he recopilado una serie de comandos que nos permita convertir cualquier archivo de los formatos más básicos a otros más compatibles con Asterisk y que pueda reproducir de una forma nativa, así que aquí los tenéis:
Convertir MP3 a WAV: (necesitaremos además la herramienta mpg123)
mpg123 -b 10000 -s entrada.mp3 | sox -t raw -r 44100 -s -w -c2 – salida.wav
Convertir WAV a ALAW:
sox entrada.wav -t raw -r 8000 -c 1 -b 8 -A salida.alaw
Convertir WAV a ULAW:
sox entrada.wav -t raw -r 8000 -c 1 -b 8 -U salida.ulaw
Convertir WAV a GSM:
sox entrada.wav -t gsm -r 8000 -c 1 -b salida.gsm
Convertir WAV a G.729:
sox entrada.wav -t raw -r 8000 -c 1 -b 8 -A salida.alaw && asterisk -rx ‘file convert salida.alaw salida.g729‘
(es necesario disponer de una licencia disponible en Asterisk de G.729 para poder convertir el archivo)
Convertir WAV a SLIN:
sox entrada.wav -t raw -r 8000 -c 1 -w -s salida.slin
Convertir WAV a MP3:
lame -b 16 -m m -q 9 –resample 8 entrada.wav salida.mp3
(el resample tiene dos guiones)
Hay muchos otros formatos y códecs que se pueden utilizar, pero seguramente ya tengáis la idea y utilizando el propio Asterisk podéis incluso convertir cualquier archivo a cualquier formato que necesitéis.