From 1febfdfe585f8ab3f9b6643ed1b045ee0e2871e9 Mon Sep 17 00:00:00 2001 From: mattf Date: Mon, 31 Jul 2006 15:50:31 +0000 Subject: [PATCH] added new AST_CRON_mix_recordings_MP3_DATE.pl file for mixing. Has specific requirements git-svn-id: svn://192.168.202.10@95 3d104415-ff17-0410-8863-d5cf3c621b8a --- .../trunk/AST_CRON_mix_recordings_MP3_DATE.pl | 176 ++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 agc_1-X/trunk/AST_CRON_mix_recordings_MP3_DATE.pl diff --git a/agc_1-X/trunk/AST_CRON_mix_recordings_MP3_DATE.pl b/agc_1-X/trunk/AST_CRON_mix_recordings_MP3_DATE.pl new file mode 100644 index 00000000..5f7ecd95 --- /dev/null +++ b/agc_1-X/trunk/AST_CRON_mix_recordings_MP3_DATE.pl @@ -0,0 +1,176 @@ +#!/usr/bin/perl +# +# AST_CRON_mix_recordings_MP3_DATE.pl +# runs every 5 minutes and mixes the call recordings in the monitor together +# and puts the resulting ALL file into the DONE directory in the "monitor" dir +# and converts the ALL file to GSM format to save space. +# +# soxmix is REQUIRED to use this script, soxmix is available only as part of +# the sox audio package, and only in newer versions. Make sure you have soxmix +# installed properly and in your path +# +# put an entry into the cron of of your asterisk machine to run this script +# every 5 minutes or however often you desire +# +# make sure that the following directories exist: +# /var/spool/asterisk/monitor # default Asterisk recording directory +# /var/spool/asterisk/monitor/DONE # where the combined files are put +# /var/spool/asterisk/monitor/ORIG # where the original in/out files are put +# +# This program assumes that recordings are saved as .wav +# should be easy to change this code if you use .gsm instead +# +# This program also sends the ALL combined file to an FTP server for archival +# purposes, you can comment out the Net::Ping and Net::FTP lines as well as the +# file transfer section of the code to deactivate remote copying of the +# recording files +# +# MODIFIED BY MAGMA NETWORKS: FTP Server has new folder created daily for archiving +# recordings. If the directory does not exist, this script creates the directory in +# YYYYMMDD format. +# +# +# VERY IMPORTANT !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +# You must be saving recordings as FULLDATE_CUSTPHONE_CAMPAIGN_AGENT +# and save files to dated-directories or this script will not work properly +# +# +# Copyright (C) 2006 Matt Florell LICENSE: GPLv2 +# Contributions by Mike Lord +# Contributions by Magma Networks LLC +# +# 51021-1058 - Added quotes around CLI executed commands +# 51122-1455 - Added soxmix and sox binary path check +# 60616-1027 - Modified to convert to MP3 format +# - Creates Directory on target FTP server based on . + +#verbose +$v=0; +#test +$T=0; + +# Customize variables for FTP +$FTP_host = '192.168.0.8'; +$FTP_user = 'recordings'; +$FTP_pass = 'recordings'; +$FTP_dir = '/var/www/html/RECORDINGS'; +$FTP_port = '21'; + +### directory where in/out recordings are saved to by Asterisk +$dir1 = '/var/spool/asterisk/monitor'; + +# get current date in the format YYYYMMDD for use in directory name on the storage server +($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); +my $today = sprintf("%d%02d%02d", $year + 1900, $mon + 1, $mday); + +$soxmixbin = ''; +if ( -e ('/usr/bin/soxmix')) {$soxmixbin = '/usr/bin/soxmix';} +else + { + if ( -e ('/usr/local/bin/soxmix')) {$soxmixbin = '/usr/local/bin/soxmix';} + else + { + print "Can't find soxmix binary! Exiting...\n"; + exit; + } + } +$lamebin = ''; +if ( -e ('/usr/bin/lame')) {$lamebin = '/usr/bin/lame';} +else + { + if ( -e ('/usr/local/bin/lame')) {$lamebin = '/usr/local/bin/lame';} + else + { + print "Can't find lame binary! Exiting...\n"; + exit; + } + } + +use Net::Ping; +use Net::FTP; + + + opendir(FILE, "$dir1/"); + @FILES = readdir(FILE); + +$i=0; +foreach(@FILES) + { + $size1 = 0; + $size2 = 0; + + if ( (length($FILES[$i]) > 4) && (!-d $FILES[$i]) ) + { + + $size1 = (-s "$dir1/$FILES[$i]"); + if ($v) {print "$FILES[$i] $size1\n";} + sleep(1); + $size2 = (-s "$dir1/$FILES[$i]"); + if ($v) {print "$FILES[$i] $size2\n\n";} + + + if ( ($FILES[$i] !~ /out\.wav/i) && ($size1 eq $size2) && (length($FILES[$i]) > 4)) + { + $INfile = $FILES[$i]; + $OUTfile = $FILES[$i]; + $OUTfile =~ s/-in\.wav/-out.wav/gi; + $ALLfile = $FILES[$i]; + $ALLfile =~ s/-in\.wav/-all.wav/gi; + $MP3file = $ALLfile; + $MP3file =~ s/-all\.wav/-all.mp3/gi; + + if ($v) {print "|$INfile| |$OUTfile| |$ALLfile|\n\n";} + + `$soxmixbin "$dir1/$INfile" "$dir1/$OUTfile" "$dir1/$ALLfile"`; + if ($v) {print "|$INfile| |$OUTfile| |$ALLfile|\n\n";} + if (!$T) + { + `mv -f "$dir1/$INfile" "$dir1/ORIG/$INfile"`; + `mv -f "$dir1/$OUTfile" "$dir1/ORIG/$OUTfile"`; + `mv -f "$dir1/$ALLfile" "$dir1/DONE/$ALLfile"`; + } + else + { + `cp -f "$dir1/$ALLfile" "$dir1/DONE/$ALLfile"`; + } + + `$lamebin -b 16 -m m --silent "$dir1/DONE/$ALLfile" "$dir1/DONE/$MP3file"`; + + + if($DB){print STDERR "\n|/usr/bin/sox $live_folder/$filename[$k]$WAV $arch_folder/$filename[$k]$GSM|\n";} + chmod 0755, "$dir1/DONE/$MP3file"; + + ### BEGIN Remote file transfer + # $p = Net::Ping->new(); + # $ping_good = $p->ping("$FTP_host"); + + # if ($ping_good) + # { + $ftp = Net::FTP->new("$FTP_host", Port => $FTP_port, Debug => ($v? 1 : 0), Passive => 1); + $ftp->login("$FTP_user","$FTP_pass"); + #$ftp->cwd("$FTP_dir"); + $ftp->mkdir("$FTP_dir/$today", 1); + $ftp->cwd("$FTP_dir/$today"); + $ftp->binary(); + $ftp->put("$dir1/DONE/$MP3file", "$MP3file"); + $ftp->quit; + # } + ### END Remote file transfer + + # clean up + if (!$T) + { + `rm -f "$dir1/ORIG/$INfile"`; + `rm -f "$dir1/ORIG/$OUTfile"`; + `rm -f "$dir1/DONE/$ALLfile"`; + `rm -f "$dir1/DONE/$MP3file"`; + } + + } + } + $i++; + } + +if ($v) {print "DONE... EXITING\n\n";} + +exit;