[asterisk-users] Voiceprompts i.e. voicemail and conferencing in multiple codecs
Steve Edwards
asterisk.org at sedwards.com
Fri Jul 2 11:08:14 CDT 2010
On Fri, 2 Jul 2010, Kenny Watson wrote:
> for i in `ls -R /var/lib/asterisk/sounds/uk/*wav`; # do recursive ls and only list wav files and loop through each one
> do # start do loop
> CONV=`echo $i|sed 's/.wav/.g729/g'` # set CONV variable as filename with wav swapped for G729
> asterisk -rx "file convert $i $CONV" # run convert command placing original filename and new filename in command
> done # end loop
First off, Digium provides "core" prompts in many encodings at
http://downloads.asterisk.org/pub/telephony/sounds/
Assuming those packages don't meet your needs, this script doesn't do what
you intended.
Because you specified "*wav," the "ls -R" is not recursing through the
directories, it's only listing the wav files in the specified directory.
Without the "*wav," ls would recurse, but it wouldn't display the path.
The "find" command is a better tool for this.
Compare:
$ ls -R /var/lib/asterisk/sounds/*wav | wc -l
241
and
$ find /var/lib/asterisk/sounds/ -name '*.wav' | wc -l
1596
And then, a few suggestions* on "better practices."
) Use "$(" and ")" instead of back-ticks. They can be nested and they
survive emailing, printers (the human kind), telephones, and strange fonts
better.
) Use shell functions instead of processes. You create 2 processes for
every file just to substitute the file type.
) Use upper case for variables** so they "stand out."
) Don't use single character variable names -- we don't code in FORTRAN
any more do we? Also, they're obtuse and a bitch to search for in an
editor.
) Use comments before a block of code instead of line by line.
# Recurse through the input path, [ab]using Asterisk*** to
# convert WAV files to G729
INPUT_PATH=/var/lib/asterisk/sounds/
for INPUT in $(find ${INPUT_PATH} -name '*.wav')
do
OUTPUT=${INPUT%.wav}.g729
asterisk -r -x "file convert ${INPUT} ${OUTPUT}"
done
# (end of snippet)
I'm sure some shell weenie could code it all up in a single arcane line of
cruft, but the goal should be clarity and maintainability.
*) I recognize some of these suggestions reflect my "religious beliefs."
If you all would "get over it" and "just convert" we can all "just get
along."
**) Being an "old-school c weenie" I don't know why I prefer upper case
for variables in shell scripts, but I do. Whatever case you prefer, be
consistent.
***) I know command line g729 encoders are hard to come by, but do you
really want to explain to your boss that you crashed the PBX trying to
convert some really funny Alison prompts you found on the net but one of
them had a funky header and it exposed a hither-to unknown bug?
--
Thanks in advance,
-------------------------------------------------------------------------
Steve Edwards sedwards at sedwards.com Voice: +1-760-468-3867 PST
Newline Fax: +1-760-731-3000
More information about the asterisk-users
mailing list