Como convertir archivos de sonido y musica en espera para Asterisk

6 Jul

Muchas veces me han pregunado si Asterisk soporta MP3 como música en espera: la respuesta es si y no. Debo decir que si porque en efecto, con el módulo format_mp3 se pueden reproducir MP3, pero debo decir no porque solamente se soportan los de bitrate constante (y hoy en día, prácticamente todos son de bitrate variable, o VBR), además de que el consumo de CPU causado por el transcoding realmente puede afectar al sistema.

Entonces, ¿cómo podemos hacer para convertir nuestra colección favorita de audio MP3 a wav, gsm, ulaw o cualquier otro de los formatos que Asterisk soporte? El mecanismo es más sencillo de lo que se cree, siempre y cuando se tengan los conocimientos mínimos de Linux para hacerlo.

  1. Si tu música origen es MP3, necesitas instalar SoX con soporte para MP3. Aquí un tutorial (en inglés) de como hacerlo. Si tienes Debian, es tan sencillo como usar:
    [codesyntax lang=»bash»]

    apt-get install sox libsox-fmt-mp3

    [/codesyntax]
    Si tu música ya está en un formato que Asterisk soporta (ej. wav mono a 16-bit 8khz), brinca al paso 3

  2. Ya con el soporte para MP3, necesitas convertir tus MP3 a un formato inicial que Asterisk pueda usar. Te recomiendo que si usas Asterisk 1.8+, los conviertas a wav de 16khz. Para todo lo demás, usa wav de 8khz. Estos son los comandos que usarías (dentro de la carpeta donde están tus MP3):
    [codesyntax lang=»bash»]

    # Para Asterisk 1.8+
    for i in `ls *.mp3`
    do sox $i -r 16000 -c 1 -s -w `echo $i|cut -d. -f1`.wav
    rename 's/.wav/.wav16/' *.wav
    done
    # Para Asterisk menor a 1.8
    for i in `ls *.mp3`
    do sox $i -r 8000 -c 1 -s -w `echo $i|cut -d. -f1`.wav
    done

    [/codesyntax]

  3. Dependiendo de la versión que hayas usado, ahora debes tener una carpeta con archivos .wav o .wav16 (Asterisk 1.8 soporta wavs en wideband que se escuchan mucho mejor si tu teléfono soporta codecs HD, como el g722). Lo que necesitas hacer es convertir estos archivos wav al formato que tu quieres (ejemplo: gsm). Para este paso, te recomiendo hagas un script que te facilite la labor. Por ejemplo: convierte.sh
    [codesyntax lang=»bash» tab_width=»3″ title=»convierte.sh»]

    #!/bin/bash
    for i in `find $1 -name "*.$2"`
    do
       j=`echo $i | cut -d . -f 1`
       asterisk -rx "file convert $j.$2 $j.$3"
    done

    [/codesyntax]

  4. No te olvides de darle permisos de ejecución al script con chmod 755 convierte.sh
  5. El último paso es el más sencillo: invocar al recien creado script. Puedes ejecutarlo de la siguiente manera:
    [codesyntax lang=»bash»]

    ./convierte.sh /var/lib/asterisk/moh wav gsm

    [/codesyntax]

Lo argumentos que el script recibe son:

  1. La carpeta donde se encuentran tus archivos (en formato wav)
  2. El formato de los archivos iniciales (los que sox te entregó)
  3. El formato de los archivos finales (gsm, ulaw, g722, ilbc, etc)

El resultado es que tendrás una carpeta con varios archivos (los originales MP3, los intermedios wav y los finales en el codec que escojas). Puedes convertir a cuantos codecs quieras siempre y cuando Asterisk los soporte.

Estos pasos también son válidos si tienes tus archivos de audio en un codec (en la carpeta /var/lib/asterisk/sounds) y quieres convertirlo a otro codec completamente diferente.

¡Suerte!

 

Christian Cabrera

Soy ingeniero en comunicaciones con especial interés en el área de voz sobre IP y tecnologías sobre información. He usado Asterisk de manera diaria desde hace más de 18 años. En el 2011 co-fundé Enlaza Comunicaciones, una empresa que se especializa en brindar servicios profesionales de consultoría sobre voz sobre IP basadas en Asterisk, así como servicios de interpretación simultánea y traducción.