Простой скрипт для радио

Искусство написания bash скриптов. Делимся своими наработками
Ответить
Серый
Сообщения: 844
Зарегистрирован: 27 сен 2012, 19:20
Темы: 102
Статус: Не в сети

Простой скрипт для радио

Сообщение Серый » 03 фев 2014, 22:19

Сделал такой велосипед, файл радиостанции номер 1

Код: Выделить всё

seryi@seryi-laptop:~$ cat s
echo shanson
cvlc http://217.20.164.170:8002 &> /dev/null
Файл радиостанции номер 2

Код: Выделить всё

seryi@seryi-laptop:~$ cat r
echo rusradio
cvlc http://online-rusradio.tavrmedia.ua/RusRadio &> /dev/null
Запускаю так, хочу слушать первую радиостанцию, набираю в консоли Потом надоедает первое радио, жму ctrl+c и запускаю второе И так далее по кругу. Потом проще, потому, что набирать не надо, надо только стрелками из истории баша выбрать позапрошлую команду и нажать энтер.
Хотелось бы запустить единый скрипт в консоли и чтобы по нажатию любой клавиши (ну в крайнем случае по нажатию например пробела) чтобы выключалось первое радио и включалось второе, потом опять первое и т.д. по кругу.
P.S. Помню мне ранее советовали скрипт с переключением по нажатию на клавиши цифр, но во первых я так не хочу, а во вторых требования к скрипту: он должен быть максимально простым, типа моих файлов s и r
Спасибо заранее.

Аватара пользователя
ZEN
Администратор
Сообщения: 1358
Зарегистрирован: 27 сен 2012, 18:23
Темы: 208
Откуда: Украина, Одесса
Статус: Не в сети

Re: Простой скрипт для радио

Сообщение ZEN » 04 фев 2014, 00:49

Черновой вариант. Список станций указан в массиве RSL (имя станции и ссылка разделены символом '='). Всякие проверки на корректность и наличие cvlc не делал. В теории можно использовать mplayer и т.д. вместо cvlc. Ну и главное, на скрипт повешены клавиши:
N (Next) - Следующая станция (если станция последняя в списке, то автоматически будет переключение на первую станцию)
B (Back) - Предыдущая станция (если перед этим была первая станция в списке, то следующей будет последняя автоматически)
S (Stop) - Стоп
P (Play) - Воспроизведение
Q (Quit) - Выход

Код: Выделить всё

#!/usr/bin/env bash

PLAYER="cvlc";

# Radio Station List
RSL=(
    "Шансон=http://217.20.164.170:8002"
    "Русское Радио=http://online-rusradio.tavrmedia.ua/RusRadio"
);

### FUNCTION LIST ###
function interrupted () {
    stop;
    reset;
    exit 0;
}

function stop () {
    kill -SIGTERM $PROC_ID &> /dev/null;
}

function play () {
    stop;
    echo ${RSL[$POS]%=*};
    $PLAYER "${RSL[$POS]#*=}" &> /dev/null & PROC_ID=$!;
}

### MAIN LOOP ###
unset PROC_ID;
trap interrupted INT;

if [[ ${#RSL[@]} == 0 ]]
then
    echo "Check your list of radio stations";
    exit 1;
fi

POS=0;

while
read -s -n1 BUFF
[[ -n $BUFF ]]
do
    case $BUFF in
        N|n) # Next
            POS=$(($POS+1));
            test $POS -ge ${#RSL[@]} && POS=0;
            play;
            ;;
        B|b) # Back
            POS=$(($POS-1));
            test $POS -lt 0 && POS=$((${#RSL[@]}-1));
            play;
            ;;
        S|s) # Stop
            stop;
            ;;
        P|p) # Play
            play;
            ;;
        Q|q) # Quit
            stop;
            exit 0;
            ;;
    esac
done

# Clean up
stop;

exit 0;
бог создал труд и обезьяну
чтоб получился человек
а вот пингвина он не трогал
тот сразу вышел хорошо

Серый
Сообщения: 844
Зарегистрирован: 27 сен 2012, 19:20
Темы: 102
Статус: Не в сети

Re: Простой скрипт для радио

Сообщение Серый » 04 фев 2014, 21:39

ZEN, спасибо за такой детальный ответ, только я хотел попроще. Пробовал сам упростить - честно говоря не скажу, что сильно получилось. В результате остановился на таком варианте:

Код: Выделить всё

reset ; echo shanson ; mplayer http://217.20.164.170:8002
while true;
do
read -s -n1 BUFF
reset ; echo rusradio ; mplayer http://online-rusradio.tavrmedia.ua/RusRadio
read -s -n1 BUFF
reset ; echo shanson ; mplayer http://217.20.164.170:8002
done
Переключение между всеми двумя радиостанциями осуществляется по двойному нажатию на энтер, выход по двойному ctrl-c (привычка, другого не надо, правда двойное нажатие перебор, ничего лучше не получилось).
Из плюсов: по клавишам 9 и 0 уменьшение и увеличение громкости, приятно. На вывод плейера в консоли забил, если добавляю &> /dev/null то не регулируется громкость.
Я не программист, давным давно немного пробовал qbasic на винде (вернее в досе на винде), видать оттуда и тяга к программам с простым видом. Не хватает меток и переходов goto, на которые все линуксоиды в интернете ругаются, что они типа не надо.
ZEN, из твоего скрипта почерпнул для себя новую команду read, правда у неё help и man никакие, я только в интернете нашёл что значат ключи -s (не выводить введённый символ) и -n1(слушать один символ).

Аватара пользователя
ZEN
Администратор
Сообщения: 1358
Зарегистрирован: 27 сен 2012, 18:23
Темы: 208
Откуда: Украина, Одесса
Статус: Не в сети

Re: Простой скрипт для радио

Сообщение ZEN » 04 фев 2014, 22:44

Серый, метки и goto зло для разработчиков в целом. Так что не только одни линуксоиды ругаются :) Что касается моего скрипта, то у меня есть один существенный плюс, так как новые станции просто дописываются в массив:

Код: Выделить всё

RSL=(
    "Шансон=http://217.20.164.170:8002"
    "Русское Радио=http://online-rusradio.tavrmedia.ua/RusRadio"
);
например, добавление в список Радио-Т и Punk Rock станции от RadioRock.com:

Код: Выделить всё

RSL=(
    "Шансон=http://217.20.164.170:8002"
    "Русское Радио=http://online-rusradio.tavrmedia.ua/RusRadio"
    "Радио-Т=http://gw.justswan.org:8000/radiot"
    "Punk Rock=http://pub8.rockradio.com:80/rr_punkrock"
);
При этом, если я захочу использовать mplayer вместо cvlc, то мне всего-лишь нужно будет поправить первую переменную в скрипте - PLAYER. Как видишь, наблюдается гибкость скрипта. Хотя он очень сильно не доработан как по мне...
бог создал труд и обезьяну
чтоб получился человек
а вот пингвина он не трогал
тот сразу вышел хорошо

Аватара пользователя
m@xim
Сообщения: 1
Зарегистрирован: 18 окт 2014, 11:53
Темы: 0
Статус: Не в сети

Re: Простой скрипт для радио

Сообщение m@xim » 18 окт 2014, 12:00

Cлушаем онлайн радио используя всем известный mplayer.

Изображение

Код: Выделить всё

#!/bin/bash
#===========================================                   
#        _ _                   _ _       
#    ___| (_)    _ __ __ _  __| (_) ___  
#   / __| | |   | '__/ _` |/ _` | |/ _ \ 
#  | (__| | |   | | | (_| | (_| | | (_) |
#   \___|_|_|___|_|  \__,_|\__,_|_|\___/ 
#          |_____|   
#
#===========================================  
# set colors
RED='\e[41m'
BLUE='\e[44m'
CYAN='\e[46m'
NC='\e[0m'
# set player
PLAYER="/usr/bin/mplayer"
# verify if $PLAYER is installed
if [ -e $PLAYER ]; then
    # stop current $PLAYER session
    if [ "$(pidof mplayer)" ]; then
        killall mplayer
    fi
    while true; do
    clear
    echo ""
    echo " ·····················································"
    echo " ·             select a station and play             ·"
    echo " ·                                                   ·"
    echo -e " · $CYAN[space]$NC to pause, $CYAN[q]$NC to stop, $CYAN[Ctrl]+[c]$NC to quit ·"
    echo " ·····················································"
    echo ""
    echo " ·································································"
    echo -e " ·  $BLUE  1 $NC  Groove Salad                    $BLUE  2 $NC  Lush             ·"
    echo -e " ·  $BLUE  3 $NC  Earwaves                        $BLUE  4 $NC  Deap Space One   ·"
    echo -e " ·  $BLUE  5 $NC  Drone Zone                      $BLUE  6 $NC  Pop Tron         ·"
    echo -e " ·  $BLUE  7 $NC  Def Con                         $BLUE  8 $NC  Dub Step Beyond  ·"
    echo -e " ·  $BLUE  9 $NC  Space Station Soma              $BLUE 10 $NC  Mission Control  ·"
    echo -e " ·  $BLUE 11 $NC  Indie Pop Rocks!                $BLUE 12 $NC  Folk Forward     ·"
    echo -e " ·  $BLUE 13 $NC  BAGel Radio                     $BLUE 14 $NC  Digitalis        ·"
    echo -e " ·  $BLUE 15 $NC  Sonic Universe                  $BLUE 16 $NC  Secret Agent     ·"
    echo -e " ·  $BLUE 17 $NC  Suberbs of Goa                  $BLUE 18 $NC  Boot Liquor      ·"
    echo -e " ·  $BLUE 19 $NC  Illinois St. Lounge             $BLUE 20 $NC  The Trip         ·"
    echo -e " ·  $BLUE 21 $NC  cliqhop idm                     $BLUE 22 $NC  Covers           ·"
    echo -e " ·  $BLUE 23 $NC  Beat Blender                    $BLUE 24 $NC  Doomed           ·"
    echo -e " ·  $BLUE 25 $NC  Black Rock FM                   $BLUE 26 $NC  SF 10-33         ·"
    echo -e " ·  $BLUE 27 $NC  custom link...                  $BLUE 28 $NC  custom link...   ·"
    echo " ·································································"
    echo ""
    echo -e " select a $BLUE number $NC from 1 to 26 then hit $CYAN[Enter]$NC"
    echo ""
    read choix
    case $choix in
        1)
            $PLAYER http://uwstream1.somafm.com:80
            ;;
        2)
            $PLAYER http://sfstream1.somafm.com:8800
            ;;
        3)
            $PLAYER http://sfstream1.somafm.com:5100
            ;;
        4)
            $PLAYER http://sfstream1.somafm.com:2800
            ;;
        5)
            $PLAYER http://uwstream2.somafm.com:80
            ;;
        6)
            $PLAYER http://sv1.vestaradio.com:7420
            ;;
        7)
            $PLAYER http://sfstream1.somafm.com:2200
            ;;
        8)
            $PLAYER http://sfstream1.somafm.com:6200
            ;;
        9)
            $PLAYER http://uwstream2.somafm.com:2666
            ;;
        10)
            $PLAYER http://sfstream1.somafm.com:2020
            ;;
        11)
            $PLAYER http://sfstream1.somafm.com:8090
            ;;
        12)
            $PLAYER http://sfstream1.somafm.com:7400
            ;;
        13)
            $PLAYER http://sfstream1.somafm.com:9090
            ;;
        14)
            $PLAYER http://sfstream1.somafm.com:8900
            ;;
        15)
            $PLAYER http://sfstream1.somafm.com:8850
            ;;
        16)
            $PLAYER http://uwstream2.somafm.com:9016
            ;;
        17)
            $PLAYER http://sfstream1.somafm.com:8850
            ;;
        18)
            $PLAYER http://sfstream1.somafm.com:7000
            ;;
        19)
            $PLAYER http://sfstream1.somafm.com:8500
            ;;
        20)
            $PLAYER http://sfstream1.somafm.com:2504
            ;;
        21)
            $PLAYER http://uwstream2.somafm.com:2668
            ;;
        22)
            $PLAYER http://sfstream1.somafm.com:8700
            ;;
        23)
            $PLAYER http://sfstream1.somafm.com:8384
            ;;
        24)
            $PLAYER http://sfstream1.somafm.com:8300
            ;;
        25)
            $PLAYER http://sfstream1.somafm.com:8040
            ;;
        26)
            $PLAYER http://uwstream2.somafm.com:2040
            ;;
        27)
            echo ""
            echo "put your custom link here"
            echo ""
            read customlink
            $PLAYER $customlink
            ;;
        28)
            echo ""
            echo "put your custom link here"
            echo ""
            read customlink
            $PLAYER $customlink
            ;;
        *)
            echo -e "$RED wrong choice $NC"
            echo "try again..."
            echo ""
            sleep 2
            clear
            ;;
    esac
    done
else
    echo " this script need mplayer"
    echo " install it or change the PLAYER"
    echo "exiting ..."
    exit 0
fi

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей