Converting WAV files
Asterisk 1.4
In asterisk 1.4 is a conversion application built in, Asterisk file convert.The command converts between different code formats.
file convert <file_in.format> <file_out.format>
A shell script example:
- !/bin/bash
- Converts a audio file from alaw to a ulaw
Convert files from the CLI
You just recorded a fabulous audio file to use as you main voice menu. Then you realize that Asterisk does not use WAV format audio for the Playback or Background applications. So what do you do? How can you convert your WAV files into GSM files that still have good sound quality?(This is partially false, Asterisk can play anything it has a format and codec for, including some wav files. See below.)Note the differences!
gsm: raw gsm encoding, good for VoIP
wav: MS wav format, 16 bit linear
WAV: MS wav format, gsm encoded (wav49)
Converting to sln format
Starting from Asterisk 1.2.0, the .sln (SLINEAR) format seems to be the preferred format.To convert wav file to sln, use the following command:
sox foo-in.wav -t raw -r 8000 -s -w -c 1 foo-out.sln
Note that sox v14.3.0 and above (installed in Ubuntu 9.10), the -w option has changed to -2
sox foo-in.wav -t raw -r 8000 -s -2 -c 1 foo-out.sln
If you have a directory full of .wav files to convert, try this command. It uses sed to automatically rename the files with the .sln extension (assuming incoming wav files at a sample rate other than 8khz.)
for a in *.wav; do sox "$a" -t raw -r 8000 -s -w -c 1 `echo $a|sed "s/.wav/.sln/"` resample -ql; done
Converting your WAV files to good GSM files is easier than you might think if you have the program Sox installed (on Debian systems the libsox-fmt-gsm package is required in addition to sox). From the shell prompt, enter this command:
sox foo.wav -r 8000 foo.gsm resample -ql
and hit the <ENTER> key. Note that the sox option '-ql' (lower case L) modifies the resample option. It is not a number one (1). In a few moments you will have a new GSM format file in the same directory as the original WAV file. In this example "foo.wav" is your main voice menu audio file in WAV format, and "foo.gsm" is the same file converted to GSM format. If you wanted to, you could use "main-voice-menu.gsm" as the name in place of "foo.gsm": what matters here is the second file name you use in this command ends in ".gsm".
If your WAV file was in stereo, add the -c1 option to convert to mono, or the output will sound very strange.
sox foo.wav -r 8000 -c1 foo.gsm resample -ql
You may get better results if you record your WAV file in 16 bit 8000 Hz mono and then run
sox foo.wav foo.gsm
If you have multiple WAV files in one directory and you want to convert them all, use this command:
for a in *.wav; do sox "$a" -r 8000 -c1 "`echo $a|sed -e s/wav//`gsm" resample -ql; done
You can also put a bash script in /usr/bin and name it wav-gsm-convert. The content can be like this
- !/bin/bash
sox -t wav $1 -r 8000 -c1 -t gsm $s resample -ql
Next, move your new foo.gsm file to the directory: /var/lib/asterisk/sounds
Now you can easily use the applications Playback and Background in your extensions.conf file to play your fabulous main voice menu. For example:
exten => s,1,Background(foo)
or
exten => s,1,Background(main-voice-menu)
or
exten => s,1,Playback(foo)
or
exten => s,1,Playback(main-voice-menu)