Asterisk Monitor и SOX

И так новогодние каникулы прошли, 1-й рабочий день. И сразу проблема, на одном из серверов где крутится Asterisk, записи разговоров выполнялись с помощью Monitor c опциями mb. Т.е. записывается исходящая и входящая связь в разные файлы (file-in.wav и file-out.wav), а потом объединяется. Так, вот из за того что на сервер не был установлен пакет sox, записи не с миксовались (не объединились). Куча файлов, надо что то делать =)

Вручную все выглядит просто
# sox -m file-in.wav file-out.wav file.wav
В общем побыстрому написал не большой скриптец на bash:
Для начала идем в директорию где лежат записи, командой
# ls -la | awk '{print $9}' > test.log
Запишем содержание директории в файл, и подкорректируем через nano, т.е. удалим строки "." и "..", так что бы в файле test.log были только имена файлов содержащихся в директории.
Далее сам скрипт:
#!/bin/bash
fname=/record/81478/test.log
sox=/usr/bin/sox
#Испольуем цикл while, в качестве параметра укажем = пока размер файла будет больше 0
size=`du $fname | awk '{print $1}'`
while [ "$size" > "0" ]
do
#Переменная входящего вызова
in=`cat $fname | sed '1!d'`
# Переменная для конечного имени, просто отсекаем "-in"
name=`cat $fname | sed '1!d' | sed 's/-in//'`
#Переменная исходящего вызова
out=`cat $fname | sed '2!d'`
#Процесс объединения
sox -m $in $out $name
#удаляем 1 и 2 строки из файла test.log
sed -i '1,2d' $fname
#Cоответственно удаляем уже не нужные файлы.
rm -rf $in && rm -rf $out
#Проверяем условие, что размер файла больше 0
size=`du $fname | awk '{print $1}'`
done
echo ====Готово====

И так пока файл не станет пустым, скрипт будет работать.

Комментарии

Популярные сообщения