LINUX.ORG.RU

ДОработка скрипта - help please


0

0

Приветствую многоуважаемого All Решил сделать запись радио по расписанию с тюнера, написал скрипт но что-то не соображу как его доработать (опыта мало), help needed Скрипт (rec) запускается по крону, причем ему надо передать 2 параметра - частоту (в идеале имя станции), и время окончания записи. У меня получился вот такой скрипт (см. ниже), но как передать ему параметры извне? Еще я пытался сделать чтобы он генерировал файлы по шаблону "Станция_времязаписи.mp3" для того, чтобы уже записанные файлы не затирались, но тоже не получается. ~/rec #!/bin/sh STATION="107.5" DIR=/home/vlad/files/multimedia #DATE="date -Iminutes +%x_%X" #N=$STATION #echo "killall rec"|at 16:01 fm -q $STATION rec -c 2 -r 44100 -s w -t WAV -| lame -m s -S -q2 -V4 - $DIR/$STATION\.mp3; fm off

Кстати попутно возник вопрос как лучше жать - в mp3 или ogg, тут тоже много неясного. Теоретически я так понял ogg лучше, и при обжиме с малым битрейтом (до ~128kbs) это заметно на моей дешевой акустике, но на ~160kbs и более я уже разницы не замечаю, хотя некоторые утверждают что у mp3 звук более естественный. Что скажет по этому поводу всезнающий All?

пожалей наши глаза, поправь форматирование!

а насчет мп3 || огг имхо колебания сдесь неуместны - конечно в огг! и качество лучше и размер меньше.

lester_dev ★★★★★
()

Сорри за форматирование, первый пост на ЛОРе:)

Приветствую многоуважаемого All 
Решил сделать запись радио по расписанию с тюнера, написал скрипт но что-то не соображу как его доработать (опыта мало), help needed 
Скрипт (rec) запускается по крону, причем ему надо передать 2 параметра - частоту (в идеале имя станции), и время окончания записи. 
У меня получился вот такой скрипт (см. ниже), но как передать ему параметры извне? Еще я пытался сделать чтобы он генерировал файлы по шаблону "Станция_времязаписи.mp3" для того, чтобы уже записанные файлы не затирались, но тоже не получается. 

~/rec 
#!/bin/sh STATION="107.5" 
DIR=/home/vlad/files/multimedia 
#DATE="date -Iminutes +%x_%X" 
#N=$STATION #echo "killall rec"|at 16:01 
fm -q $STATION rec -c 2 -r 44100 -s w -t WAV -| lame -m s -S -q2 -V4 - $DIR/$STATION\.mp3; fm off

Кстати попутно возник вопрос как лучше жать - в mp3 или ogg, тут тоже много неясного. Теоретически я так понял ogg лучше, и при обжиме с малым битрейтом (до ~128kbs) это заметно на моей дешевой акустике, но на ~160kbs и более я уже разницы не замечаю, хотя некоторые утверждают что у mp3 звук более естественный. Что скажет по этому поводу всезнающий All? 

Mousehouse
() автор топика
Ответ на: комментарий от Mousehouse

>причем ему надо передать 2 параметра

Если ты хочешь передавать параметры по простому, типа:

./rec.sh param1 param2

то использовать в скрипте можно так:

#!/bin/bash
#this is rec.sh file

param1=$1
param2=$2

echo $param1
echo $param2

Ну или даже не обязательно создавать дополнительные переменные, 
просто это удобнее в больших скриптах. Можно сразу:

echo $1
echo $2

Ну echo это так, для примера. 

Думаю для твоих целей этого будет вполне достаточно.

kvit
()
Ответ на: комментарий от kvit

Спасибо. В данный момент рабочая версия скрипта
выглядит так:

#!/bin/sh
STATION=$1
DIR=/home/vlad/files/multimedia
DATE="date -Iminutes +%x_%X"
#D="echo $DATE"
#N=$STATION
echo "killall sox"|at $2
fm -q $STATION
rec -c 2 -r 44100 -s w -t WAV -| lame -m s -S -q2 -V4 - $DIR/$STATION\.mp3; fm off

(1)Запись прекращается путем прибивания sox,
тот же эффект если делать killall rec lame, как правильнее?
Еще пока не удается вывести дату записи в имя файла (типа {радиостанция_ДД.ММ.ГГ.mp3} )- это нужно чтобы файлы не
затирались новыми и можно было разобрать их в свободное
время в спокойной обстановке. (2)Как это сделать?
Кстати заметил интересную особенность - запись идет
(с line-in) независимо от положения ползунков в микшере.
(3) Я правильно понял что параметров, передаваемых скрипту
в командной строке ($1 и т.д.) может быть сколько угодно?

С уважением, Mousehouse

Mousehouse
() автор топика
Ответ на: комментарий от Mousehouse

>Еще пока не удается вывести дату записи в имя файла (типа {радиостанция_ДД.ММ.ГГ.mp3} )

~$ Date=`date "+%d.%m.%Y"`;echo $Date
24.02.2006

Надеюсь дальше сам разберешься;)

>(3) Я правильно понял что параметров, передаваемых скрипту
в командной строке ($1 и т.д.) может быть сколько угодно?

Именно так.

>(1)

Главное, чтобы после "убивания" ничего лишнего не оставалось висеть и ничего лишнего не грохнулось случайно

kvit
()
Ответ на: комментарий от kvit

по третьему пункту небольшая поправка, сразу из головы вылетело. Для параметров с порядковым номером 10 или больше в скрипте обращение идет так:

${number}

Хотя, чтоб не путаться, можно для всех параметров использовать такие скобки.

kvit
()
Ответ на: комментарий от kvit

УРА! После непродолжительного ковыряния
с аргументами получилось! Вот работающия скрипт:

#!/bin/sh
STATION=$1
DIR=/home/vlad/files/multimedia
DATE=`date "+%d.%m.%Y %H:%M"`
echo "killall sox"|at $2
fm -q $STATION
rec -c 2 -r 44100 -s w -t WAV -| lame -m s -S -q2 -V4 - $DIR/"$STATION"\ "$DATE"\.mp3; fm off

В ближайшем будущем планирую доработать его так,
чтобы он понимал в качестве агрумента не частоту,
а имя станции (или одновременно либо частоту,
либо имя), тут без конструкций if ... fi наверное
не обойдешься? Потом можно будет пустить его по
крону и наслаждаться.

БОЛЬШОЕ СПАСИБО ЗА СОВЕТЫ

wbr, mousehouse

Mousehouse
() автор топика
Ответ на: комментарий от Mousehouse

$DIR/"$STATION"\ "$DATE"\.mp3
               ^^^
Пробелы в именах файлов это религия?

sdio ★★★★★
()
Ответ на: комментарий от Mousehouse

>$DIR/"$STATION"\ "$DATE"\.mp3
>               ^^^
>Пробелы в именах файлов это религия?

А ведь в первоначальном варианте по человечески хотел сделать:
{радиостанция_ДД.ММ.ГГ.mp3}
:)

>В ближайшем будущем планирую доработать его так,
>чтобы он понимал в качестве агрумента не частоту,
>а имя станции (или одновременно либо частоту,
>либо имя), тут без конструкций if ... fi наверное
>не обойдешься? Потом можно будет пустить его по
>крону и наслаждаться.

if .. fi для имени использовать будет неудобно, проще так:

~$ cat test.sh
#!/bin/bash

HZ=5
FM1=1
FM2=2
FM3=3

case $1 in
  EuropePlus)
   STATION=105.7
  ;;
  OtherStation)
   STATION=111.9
  ;;
  *)
   STATION=$(($1))
  ;;
esac

echo $STATION
~$

В скрипте описаны даже два способа подстановки имени радиостанции без
использования if .. fi. В качестве аргументов можно использовать сл.
величины:

#способ 1:
HZ
FM1
FM2
FM3

#способ 2:
EuropePlus
OtherStation

case в твоем случае может и громоздко будет использовать, но он лучше,
если нужны более-менее длинные куски скрипта зависящие от переданного
параметра.

kvit
()
Ответ на: комментарий от kvit

>Пробелы в именах файлов это религия? А что в этом плохого?

>http://gazette.linux.ru.net/rus/articles /abs-guide/index.html О, спасибо и за это...

Я тут протестировал скрипт в реальном деле - все работает отлично, хотя есть непонятки такого плана. Записал я передачу, конечно записалось лишнего. Вырезал ненужное в Audacity, сохранил - так вот получилось что исходная запись была намного лучше (vbr и т.д.) Audacity не дает тонко настроить параметры экспорта, и вдобавок двойное пережатие - наверное тоже хорошего мало. Как это все сделать по-человечески? На ум пришло два варианта - либо записывать в простой вав (места надо много :( ), потом редактировать в Audacity и пережимать в mp3 скриптом по крону в ночное время, либо обрезать чем-нибудь mp3-шку "механически". Пересчитал по второму варианту время в байты, отрезал split`ом - не сходится, т.к. битрейт переменный:) Вот такие дела, и что с этим делать?

Mousehouse
() автор топика
Ответ на: комментарий от Mousehouse

Пардон, форматирование...:)

>Пробелы в именах файлов это религия?
А что в этом плохого?

>http://gazette.linux.ru.net/rus/
articles/abs-guide/index.html
О, спасибо и за это...

Я тут протестировал скрипт в реальном
деле - все работает отлично, хотя есть
непонятки такого плана.
Записал я передачу, конечно записалось
лишнего. Вырезал ненужное в Audacity,
сохранил - так вот получилось что
исходная запись была намного лучше
(vbr и т.д.) Audacity не дает тонко настроить
параметры экспорта, и вдобавок двойное пережатие
- наверное тоже хорошего мало. Как это все
сделать по-человечески? На ум пришло два варианта
- либо записывать в простой вав (места надо
много :( ), потом редактировать в Audacity и
пережимать в mp3 скриптом по крону в ночное
время, либо обрезать чем-нибудь mp3-шку
"механически". Пересчитал по второму варианту
время в байты, отрезал split`ом - не сходится,
т.к. битрейт переменный:) Вот такие дела, и
что с этим делать?

Mousehouse
() автор топика
Ответ на: комментарий от Mousehouse

>А что в этом плохого?

От лукавого это все, вот простой пример:

~/work$ touch asd\ as
~/work$ find ./ -type f
./asd as
~/work$ find ./ -type f|xargs rm
rm: невозможно удалить `./asd': No such file or directory
rm: невозможно удалить `as': No such file or directory

Хотя и тут можно извернуться:

~/work$ find ./ -type f|sed -e 's/ /\\ /g'|xargs rm

Но зачем? Вообще не желательно использовать в именах файлов символы,
которые приходится экранировать. Некоторые утилиты, способные работать
с кучей файлов сразу, могут это не учитывать. Пример выше я привел.

kvit
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.