Upgrade 3CX to v18 and get it hosted free!

Perl EAGI

Author image

<?php
 
#!/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$buffer80000 );
 
$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 -b 16 -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;
?>


Article Reviews

Write a Review

Your email address will not be published. Required fields are marked *

Required Field. Minimum 5 characters.

Required Field. Minimum 5 characters, maximum 50.

Required field.There is an error with this field.

Required Field.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

There are no reviews for this article. Be the first one to write a review.
Get 3CX - Absolutely Free!
Link up your team and customers Phone System Live Chat Video Conferencing

Hosted or Self-managed. Up to 10 users free forever. No credit card. Try risk free.

3CX
A 3CX Account with that email already exists. You will be redirected to the Customer Portal to sign in or reset your password if you've forgotten it.