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
#!/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
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 cmd MusicOnHold
- Asterisk config musiconhold.conf
- Asterisk cmd SetMusicOnHold
- Asterisk cmd MP3Player
- mpg123
- mpg123 on Red Hat
Asterisk | Tips & Tricks | FAQ
Comments
333Other sax manipulations
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.
333Use mpg321 and sox to emulate mpg123
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:
- !/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
That's it.