Интернет радио из Raspberry Pi управляемое любым пультом. Статья 3 соединяем пульт и плеер.

01.10.2013 16:53

Ну вот мы и добрались непосредственно к связке пульта управления и проигрывателя радио.

Для того, чтобы управлять проигрывателем mpc при помощи пульта управления, нужно создать несколько дополнительных файлов. В качестве языка программирования будем использовать BASH, он есть практически везде и не требует дополнительных манипуляций с установкой. Возможно, в последствии все и перепишется на Pyton или еще лучше на Lua.

В предыдущей статье мы уже «приручили» пульт, но этого мало, нужно еще написать сценарий для обработка каждой кнопки.

Так как предполагалось использовать интернет радио в качестве отдельного модуля комплекса программ, то сценарий для lirc будет состоять из нескольких файлов. Первый файл будет обрабатывать основной режим пульта, а второй будет обрабатывать нажатия в режиме Радио.

 

Первый файл создаем в домашнем каталоге пользователя pi и назовем его .lircrc

Содержимое файла такое:

begin irexec
# Запуск приложения
begin
prog = irexec
button = KEY_TEXT
# Говорим режим работы
config = /home/pi/.isin/rejim.sh play live
end

begin
prog = irexec
button = KEY_BLUE
# Говорим режим работы и запускаем радио
config = /home/pi/.isin/rejim.sh play radio && mpc play
# Переходим в режим радио
mode = radio
end
begin
prog = irexec
button = KEY_POWER
# останавливаем все проги и выключаем комп
config = mpc stop && sleep 3 && echo "Пока" && sleep 1 && sudo halt &
end
end irexec

begin radio
# подключаем файл управления программой MPC
include .lirc/lircrc.mpc
end radio

Из комментариев внутри файла должно быть все понятно, за исключением строки /home/pi/.isin/rejim.sh это запуск файла озвучивания команд, о нем расскажу позже.

В общем после старта Raspberry программа ждет нажатия на пульте и находится в так называемом автономном режиме. Для перехода к прослушиванию радио нужно нажать на пульте синюю кнопку. Теперь программа передает управление в файл lircrc.mpc, который должен находиться в каталоге /home/pi/.lirc/, с таким содержимым:

# файл управления программой MPC
begin
prog = irexec
button = KEY_TEXT
# Говорим название станции
config = /home/pi/.isin/rejim.sh radio 0
end

begin
prog = irexec
button = KEY_1
# Переходим на канал и говорим название станции
config = mpc play 1 && /home/pi/.isin/rejim.sh radio 1
end

begin
prog = irexec
button = KEY_2
# Переходим на канал и говорим название станции
config = mpc play 2 && /home/pi/.isin/rejim.sh radio 2
end

begin
prog = irexec
button = KEY_3
# Переходим на канал и говорим название станции
config = mpc play 3 && /home/pi/.isin/rejim.sh radio 3
end

begin
prog = irexec
button = KEY_4
# Переходим на канал и говорим название станции
config = mpc play 4 && /home/pi/.isin/rejim.sh radio 4
end

begin
prog = irexec
button = KEY_5
# Переходим на канал и говорим название станции
config = mpc play 5 && /home/pi/.isin/rejim.sh radio 5
end

begin
prog = irexec
button = KEY_6
# Переходим на канал и говорим название станции
config = mpc play 6 && /home/pi/.isin/rejim.sh radio 6
end

begin
prog = irexec
button = KEY_7
# Переходим на канал и говорим название станции
config = mpc play 7 && /home/pi/.isin/rejim.sh radio 7
end

begin
prog = irexec
button = KEY_8
# Переходим на канал и говорим название станции
config = mpc play 8 && /home/pi/.isin/rejim.sh radio 8
end

begin
prog = irexec
button = KEY_9
# Переходим на канал и говорим название станции
config = mpc play 9 && /home/pi/.isin/rejim.sh radio 9
end

begin
prog = irexec
button = KEY_0
# Переходим на канал и говорим название станции
config = mpc play 10 && /home/pi/.isin/rejim.sh radio 10
end


begin
button = KEY_CHANNELUP
prog = irexec
repeat = 8
config = mpc next && /home/pi/.isin/rejim.sh radio next
end

begin
button = KEY_CHANNELDOWN
prog = irexec
repeat = 8
config = mpc prev && /home/pi/.isin/rejim.sh radio previous
end

begin
button = KEY_VOLUMEUP
prog = irexec
repeat = 2
config = mpc volume +5 && echo "vol+"
end

begin
button = KEY_VOLUMEDOWN
prog = irexec
repeat = 2
config = mpc volume -5 && echo "vol-"
end

begin
button = KEY_PLAYPAUSE
prog = irexec
repeat = 0
config = mpc toggle && echo "play-pause"
end

begin
button = KEY_SLEEP
prog = irexec
repeat = 0
config = mpc stop && echo "stop"
end

begin
button = KEY_RECORD
prog = irexec
repeat = 0
config = mpc play && echo "play"
end
begin
# проговариваем время
button = KEY_TIME
prog = irexec
repeat = 0
config = mpc stop && /home/pi/.isin/rejim.sh time && mpc play
end
begin
prog = irexec
button = KEY_POWER
# останавливаем мпс и возращаем управление основному файлу
config = mpc stop && echo "exit mpc"
mode = irexec
end

Код предельно простой, выполняется команда и проговаривается название радиостанции.

Если все по простому, тогда на этом можно остановиться и пользоваться плеером «вслепую», но мы не ищем легких путей и поэтому немного озвучим наше радио.

Для озвучки будут нужны еще несколько файлов в разных каталогах, итак в каталоге /home/pi/

Создаем подкаталог .isin, а в нем два подкаталога /mp3 и /radio. В каталог mp3 нужно скопировать три файла с заранее записанными словами rejim.mp3(режим), radio.mp3(радио) и live.mp3(автономный). В каталоге radio создаем файл txtplaylist, содержащий список названий радиостанций (соответствующий списку в плейлисте /home/pi/.mpd/playlists/my.m3y) на русском языке. Вот мое содержимое txtplaylist:

Народное радио
магнетик авто
Звезда
Мега радио
Русский хит
Супер радио
Хит эфэм
Наше радио

Список может содержать ошибки, главное что бы их нормально воспроизводил Гугл. Конечно для начала довольно «муторно» все это делать в консоли, но в планах сделать нормальную вэбморду и управлять уже из нее.

Теперь подошли к самому главному – это файл rejim.sh который помещаем в каталог /home/pi/.isin/. Это сценарий на BASH, который выполняет определенное действие в зависимости от переданных параметров. Содержимое:

#!/bin/bash
# здесь объявляем активный режим
# две переменные передаются при вызове файла

if ( [ "$1" = "play" ] ) # озвучиваем режим работы
then
mpc stop && madplay /home/pi/.isin/mp3/rejim.mp3
case "$2" in
"radio" ) madplay /home/pi/.isin/mp3/radio.mp3 && mpc play;;
"signalka" ) madplay /home/pi/.isin/mp3/signalizaciy.mp3;;
"live" ) madplay /home/pi/.isin/mp3/live.mp3;;
esac
fi
if ( [ "$1" = "radio" ] ) # в режиме радио озвучиваем проигрываемую станцию
then
stroka=`mpc | grep "playing"` # выбираем строку с номером канала
# выбираем именно номер одинарный или двухзначный
# теоретически добавив еще одно ?[0-9] можно сделать трехзначный
if [[ "$stroka" =~ [+-]?[0-9]?[0-9] ]]; then
nomer=$BASH_REMATCH'p' #добавляем "р", для правильного параметра комады sed
fi
#присваиваем переменной значение из строки с номером канала
speak=`sed -n $nomer /home/pi/.isin/radio/txtplaylist`
wget -U "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5" "http://translate.google.com/translate_tts?q=$speak&tl=ru" -O /home/pi/.isin/mp3/akt_kanal.mp3
# и воспроизводим его
mpc stop && madplay /home/pi/.isin/mp3/akt_kanal.mp3 && mpc play
fi
if ( [ "$1" = "time" ] ) # говорим время
then
#получаем текущее время
speak=`date +%H"ч."%M"м."`
wget -U "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5" "http://translate.google.com/translate_tts?q=$speak&tl=ru" -O /home/pi/.isin/mp3/akt_kanal.mp3
# и воспроизводим его
madplay /home/pi/.isin/mp3/akt_kanal.mp3
fi

Код как видно полностью прокомментирован и думаю в пояснениях не нуждается.

По кнопке Time на пульте проговариваем текущее время

Итак, мы получили интернет радио для десяти каналов (можно и намного больше, но я не вижу в этом великой необходимости, а кода нужно будет добавить прилично) с возможностью проговаривания названия станции – это сильно помогает когда нет дисплея и тебе не нужно запоминать на какой кнопке какая станция.

В дальнейшем код будет дорабатываться и дополняться, ведь радио – это только один из нескольких модулей системы управления построенной на Raspberry Pi, главное что бы хватило мощности «малины».

Овсянников Константин.