login | register
Fri 29 of Aug, 2008 [20:34 UTC]

voip-info.org

Discuss [2] History

Asterisk mpg123 faking it

Created by: stan,Last modification on Tue 08 of Nov, 2005 [09:19 UTC] by JustRumours

How to replace MPG123 with SOX for musiconhold


Note: Asterisk 1.2 has solved the "mpg123 issue" and comes with a cleaner solution, so what is described below essentially is only of interest for Asterisk 1.0.x users.

As an alternative to using mpg123 you can use sox to convert a wav file into the right format for asterisk and use cat to "play" the file

Example with converted files if you do not want to install mpg123 or sox
Note: If the rawplayer method is not playing back any music, try adding ".mp3" to the end of the .raw filenames.

sox -V moh.wav -r 8000 -c 1 -w moh.raw


You could use audacity (open the mp3 then File -> Export as WAV...) or xmms to convert the mp3 to wav

  • Option 1: Hacking mpg123 and playing a single file
Then make a file called /usr/local/bin/mpg123 with the following contents

#!/bin/sh
while [ 1 ]; do cat /path/to/moh.raw || exit; done

I think you need to uncomment the default line in the sample musiconhold config for Asterisk to try and launch mpg123

  • Option 2: Use custom mode in musiconhold.conf and use rawplayer script
The musiconhold configuration includes a "custom" mode that lets you specify the program to run in order to play your (faked) mp3's. We can use this to run our own "rawplayer" instead of mpg123.
Put something like this in musiconhold.conf:

[classes]
default => custom:/var/lib/asterisk/mohmp3/default,/usr/bin/rawplayer
classic => custom:/var/lib/asterisk/mohmp3/classic,/usr/bin/rawplayer


Then make an executable file /usr/bin/rawplayer like this:

#!/bin/sh
for name in $@; do
cat $name ;
done


And finally convert your mp3 files to raw as stated above an place them in subdirectories default an classic under /var/lib/asterisk/mohmp3 and (VERY IMPORTANT!) rename them from *.raw to *.mp3 (as Asterisk expect they are named that way):

# cd /var/lib/asterisk/mohmp3/default
# rename .raw .mp3 *.raw


Now restart Asterisk and you have your "default" and "classic" music available with less cpu load.

See Also



Asterisk | Tips & Tricks | FAQ

Comments

Comments Filter
222

333Other sax manipulations

by slamb, Friday 13 of May, 2005 [02:31:17 UTC]
sax supports quite a few other manipulations. I ended up with a commandline something like this:

   sox INPUT -t raw -c 1 -r 8000 -w -v 0.25 OUTPUT resample -ql

The "-v 0.25" between INPUT and OUTPUT will reduce the volume to 25%.

The "resample -ql" after OUTPUT should make the rate reduction sound better.

There are a lot of other things you can; see the sox manpage.
222

333Use mpg321 and sox to emulate mpg123

by tries, Monday 14 of March, 2005 [21:22:12 UTC]
The mpg321 package is not cabable of producing the proper raw stream format required by Asterisk. Mpg321 simply ignores unknown commandline switches and produces a raw stream with the same sample rate and chanels as the input file (e.g. 44100, stereo). Asterisk needs a single channel (mono) raw stream with 8000Hz sample rate.
As I did not want to start installing another mp3 player software on that box, I made s small wrapper script to combine (the existing) mpg321 and sox to generate the proper output format:

/usr/local/bin/asterisk_play.sh:
  1. !/bin/sh
mpg321 -q -s -z --wav - $* | sox -t wav - -t raw -c1 -r8000 -w2 - 2>/dev/null;

My musiconhold.conf looks:
;
; Music on hold class definitions
;
[classes]]
default => custom:/home/hb9xar/asterisk/var/lib/asterisk/mohmp3,/usr/local/bin/asterisk_play.sh
loud => mp3
/home/hb9xar/asterisk/var/lib/asterisk/mohmp3
random => quietmp3
/home/hb9xar/asterisk/var/lib/asterisk/mohmp3,-z

That's it.