Несмотря на то, что статья затрагивает тему разработки ПО, кода в ней нет, потому что цель статьи описать идею и функционал, а не процесс его реализации. Если тема кода будет интересна хабравчанам, я постараюсь осилить отдельную статью с описанием процесса разработки.
Изначально софтовой начинкой акустики был OSMC, но мудрые люди в комментариях обратили внимание на то, что Kodi (aka OSMC) – слишком жирно в качестве «мозгов» для интернет-радио станции. Слишком он умный и большой, только для аудио-проектов лучше подойдет Volumio. Собственно, все так и оказалось. Volumio легче, заточен под веб-интерфейс и имеет более продвинутый и удобный в разработке API. Также отпала необходимость в торчащем сзади кабеле HDMI, поскольку Volumio полностью настраивается в любом браузере.
Однако, и у Volumio обнаружилась пара важных недостатков, подвигнувших меня на дальнейшее исследование. Это, во-первых, время загрузки, и во-вторых, отсутствие автовоспроизведения. После изучения официальной документации (из которой можно понять, что Volumio — это надстройка над mpd (Music Player Daemon)), я решил, что пришло время написать на js собственную обертку под названием RPi-Radio, которая решала бы эти проблемы. Серверная ее часть работает на Node.js, а клиентская часть (GUI), использующая React.js, была готова еще со времен использования OSMC, ее нужно было только немного подправить. Так это выглядит на экране смартфона в настоящее время:
Ниже приведена табличка, наглядно показывающая недостатки и преимущества каждого из фреймворков.
Критерий | |||
---|---|---|---|
Время загрузки | |||
Автовоспроизведение при запуске | |||
Кол-во тапов из главного экрана «родного» GUI на смартфоне для выбора радиостанции из списка Favorite** | |||
Необходимость в мониторе, клавиатуре и мыши*** | |||
Веб-управление | |||
Редактирование списка станций | |||
Удобство первоначальной настройки | |||
Интеграция с моим GUI для управления со смартфона | |||
Удобство ежедневного использования |
* на самом деле да, но надо делать костыль и подсовывать его автозагрузку Raspbian; в случае с OSMC костыль пишется на python, а в случае с Volumio — на js или bash. Но в обоих случаях оно все равно работает не так, как бы хотелось.
** для OSMC и Volumio это очень важные параметры, ведь все эти тапы-скроллы необходимо делать каждый раз при включении колонки. Для RPi-Radio этот параметр хоть и минимален, но все равно не так важен, поскольку колонка начинает играть сама при включении.
*** имеется ввиду физическое подключение монитора, клавиатуры и мыши к самой Raspberry Pi, т.е. те случаи, когда нет возможности обойтись встроенным веб-интерфейсом или подключением по ssh.
Автовоспроизведение присутствует в mpd из коробки, мне не пришлось ничего делать для его активации – удобно! В Volumio, хотя он и является оберткой mpd, эту функцию придушили ради красивого звука приветствия. Как я уже писал, можно сделать скрипт и положить его в автозагрузку. Аналогичная ситуация и у OSMC.
У OSMC большая часть взаимодействия с пользователем происходит через монитор: есть красивый интерфейс, возможность смотреть видео, картинки, читать новости и смотреть погоду – много всего, чего моя колонка никогда в жизни делать не будет.
А вот веб-управление у OSMC очень ограниченно, и удаленно даже нельзя настроить список любимых станций в плагине Radio – только через монитор. У Volumio – наоборот, все только через веб-интерфейс. Редактировать список станций удобнее всего в браузере на десктопе/лэптопе, но можно и на смартфоне при желании. У RPi-Radio через веб-интерфейс можно только выбирать станцию и регулировать звук. Список станций, да и вообще все остальное надо делать через консоль по ssh. Со списком станций сложнее всего: если у OSMC и Volumio есть свои обширные библиотеки интернет-радиостанций, то в RPi-Radio мне пришлось забивать адреса своих любимых станций вручную в формате JSON. Неудобно, но всего один (или несколько) раз в жизни.
С первоначальной настройкой хуже всего у OSMC. Сначала надо подключить к «малине» монитор и настроить плагин Radio, потом надо еще через консоль или по ssh настроить вывод звука на внешний ЦАП IQAudio (тот, что у платы Suptronics X400). У RPi-Radio настройка ЦАП такая же, но хотя бы все остальное делается тоже по ssh. Лидер в этой номинации, безусловно, Volumio – для вывода звука через внешний ЦАП надо просто в меню настроек выбрать соответствующий пункт из выпадающего списка. Сравнение есть даже на официальном сайте Suptronics (http://www.suptronics.com/xseries/x400.html)
GUI в RPi-Radio представляет собой простенькую веб-страничку, реализованную на React.js. Серверная часть, отвечающая за взаимодействие между клиентским GUI и mpd, работает на Node.js и представляет собой простенький HTTP- и WebSocket- сервер на базе связки Socket.io
+ http
+ express
. Она запускается на Raspbian в качестве сервиса при включении системы сразу после старта сервиса mpd и для управления mpd использует модуль mpc-js
. Клиентский GUI доступен любому браузеру в моей домашней сети просто по ip или hostname «малинки». Идеально.
Исходники RPi-Radio опубликованы на Github. В том же репозитории, в соответствующих бранчах, можно найти обе адаптации GUI для работы с OSMC и Volumio.
Результат моих экзерсисов, RPi-Radio, выходит за рамки простого дополнения к какой-то колонке, существующей в единственном экземпляре. Это в своем роде готовое решение, которое превращает в интернет-радиоприемник не только Raspberry Pi, но и любое устройство с аудио-выходом, доступом в Интернет и возможностью запуска mpd и Node.js. Основным достоинством такой системы является отсутствие всего лишнего. Собственно, как это сделано и в Sonos, в том идеале, который я стремлюсь достичь.
Источник