Un-top-posting and trying to regurgitate into a cohesive thread...
On Wed, 21 Jul 2010, Quy Pham Sy wrote:
I have to play a alaw file with .wav ext. How can I do this?
On Wed, 21 Jul 2010, Danny Nicholas wrote:
Asterisk won’t be “happy” trying to play foobar.wav if it is actually a
.alaw file. Since you can’t rename the existing files, there’s no law
that says you can’t copy them and play them correctly. Assuming that
your calls are using the alaw codec, this snippet would do the trick
Exten => 1234,1,answer
Exten => 1234,n,System(/bin/cp foobar.wav /tmp/foobar.alaw)
Exten => 1234,n,playback(/tmp/foobar)
Exten => 1234,n,System(/bin/rm /tmp/foobar.alaw)
On Wed, 21 Jul 2010, Kevin P. Fleming wrote:
No, that won't work either, because a WAV file has a header, and a raw
alaw file does not... so Asterisk will try to play the contents of that
header as alaw data, presumably producing terrible noise.
The best you can do is to use sox to convert them from
alaw-in-WAV-container to raw-alaw.
On Wed, 21 Jul 2010, Quy Pham Sy wrote:
>> Exten => 1234,n,System(/bin/cp foobar.wav /tmp/foobar.alaw)
it actually works, I made a link to the .wav file instead of copying it
ln -s foobar.wav foobar.alaw, and it works well.
My .wav files are alaw file indeed. Here is the output from file command
$file 53.wav
53.wav: RIFF (little-endian) data, WAVE audio, ITU G.711 A-law, mono
8000 Hz
they've just named as xxx.wav so I guess there is no problems with
copying or linking solutions.
It only "appears" to be working because you can't hear the problem.
Your files are not "mis-named," they are formatted in a way that Asterisk
doesn't handle. Asterisk understands A-LAW encoding, just not when it's in
a WAV "container."
(There is no such thing as an "alaw file." You may be thinking of a
raw (header-less) file containing A-LAW encoded data.)
By "tricking" Asterisk into playing the file as a header-less file,
Asterisk is processing the WAV header as A-LAW encoded data. A WAV file
has a 44 byte header. An A-LAW sample is 1 byte (not real sure about
that). The sample rate is 8,000 per second. The 44 "samples" are played in
about 1/200th of a second so you don't hear the "noise" at the beginning
of the file.
You can create an "A-LAW in WAV" file using:
sox\
/var/lib/asterisk/sounds/demo-congrats.wav\
-A\
-t wav\
alaw-in-wav.wav
If you extract the header using:
dd\
bs=44\
count=1\
if=alaw-in-wav.wav\
of=header.wav
And then concatenate a bunch of them:
for ((IDX = 0; IDX < 200; ++IDX))
do
cat header.wav
done >noise.alaw
And then convert this into a "more normal" WAV file:
sox -t al noise.alaw -s -w noise.wav
You can play this in most audio players and hear about 1 second of a not
too annoying buzz.
The "proper" way to handle this would be to enhance
format_wav.c/format_wav_gsm.c to handle A-LAW encoded data.
Another approach would be to write an AGI (playback-alaw-in-wav?) to
"wrap" the create a link, play the file, delete the link band-aid. You
could do in dialplan, I just prefer writing code where I have more
flexibility and better error handling.
--
Thanks in advance,
-------------------------------------------------------------------------
Steve Edwards [email protected] Voice: +1-760-468-3867 PST
Newline Fax: +1-760-731-3000
--
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --
New to Asterisk? Join us for a live introductory webinar every Thurs:
http://www.asterisk.org/hello
asterisk-users mailing list
To UNSUBSCRIBE or update options visit:
http://lists.digium.com/mailman/listinfo/asterisk-users