[Asterisk-Users] EAGI Audio Capture
ha i
hai_2k at yahoo.com
Mon Dec 5 22:48:56 MST 2005
Hello Everyone,
Why EAGI is made so complex? The audio captured with
the EAGI-perl script on voip-info.org is almost not
useful. The clarity of the audio is pathetic. Am i
missing something??? I have Digium TDM 12B. I can get
calls to my VoIP phone ok thru TDM and asterisk. But
when i use EAGI-perl script, neither GSM nor RAW audio
file created after capture sounds clear. Lot of noise
and voice can not even be heard.
Please Help!!!
Thanks
Frank
EAGI-perl script:
===========
#!/usr/bin/perl
#
# Note that this example doesn't check the results of
AGI calls, and doesn't use
# Asterisk::AGI in an attempt to keep it simple and
dependency free.
#
# This program is free software; you can redistribute
it and/or modify
# it under the same terms as Perl itself.
#
# Author: Simon P. Ditner / http://uc.org/simon
#
# Usage:
# - Create an AGI in /var/lib/asterisk/agi-bin, i.e.:
perl.eagi
# - Call using EAGI from your dialplan: exten =>
100,1,EAGI(perl.eagi)
#
use warnings;
use strict;
use IO::Handle;
$| = 1; # Turn of I/O Buffering
my $buffer = undef;
my $result = undef;
my $AUDIO_FD = 3; # Audio is delivered on file
descriptor 3
my $audio_fh = new IO::Handle;
$audio_fh->fdopen( $AUDIO_FD, "r" ); # Open the audio
file descriptor for reading
# Skip over the preamble that Asterisk sends this AGI
while( <STDIN> ) {
chomp($_);
last if length($_) == 0;
}
# Playback beep
print "STREAM FILE beep \"#\"\n"; $result = <STDIN>;
# Record 5 seconds of audio at 8,000 samples/second
(uses 16 bit integers)
# 5 seconds x 8000 samples/second x ( 16 bits /
8bits/byte ) = 80000 bytes
my $bytes_read = $audio_fh->read( $buffer, 80000 );
$audio_fh->close();
# Playback beep
print "STREAM FILE beep \"#\"\n"; $result = <STDIN>;
# Write the raw audio to a file for later analysis
my $fh;
open( $fh, ">/tmp/recording.raw" );
print $fh $buffer;
close( $fh );
# Also convert the raw audio on-the-fly to the GSM
format using 'sox', so that
# we can play it back to the user right now.
open( $fh, "|/usr/bin/sox -t raw -r 8000 -s -w -c 1 -
/tmp/recording.gsm" );
# | | | | | | |
# | | | | | | '-- Write to this file
# | | | | | '-- Read from STDIN
# | | | | '-- Mono Audio
# | | | '-- Samples are words (a word is 2 bytes = 16
bit audio)
# | | '-- The audio is signed (32766..-32766)
# | '-- The sample rate is 8,000 samples/second
# '-- The input format is SLIN, which is 'raw' audio
print $fh $buffer;
close( $fh );
# Playback /tmp/recording.gsm
print "STREAM FILE /tmp/recording \"#\"\n"; $result =
<STDIN>;
exit;
__________________________________________
Yahoo! DSL Something to write home about.
Just $16.99/mo. or less.
dsl.yahoo.com
More information about the asterisk-users
mailing list