Несмотря на то, что статья затрагивает тему разработки ПО, кода в ней нет, потому что цель статьи описать идею и функционал, а не процесс его реализации. Если тема кода будет интересна хабравчанам, я постараюсь осилить отдельную статью с описанием процесса разработки.
Изначально софтовой начинкой акустики был 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 для управления со смартфона | |||
Удобство ежедневного использования |
** для 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, в том идеале, который я стремлюсь достичь.
Комментарии (19)
claymen
07.02.2018 23:58Интересно есть проекты совместимые с sonos, скажем эмулятор соноса?
bellerofonte Автор
08.02.2018 09:55Кастомный Sonos-клиент где-то мне попадался, а вот эмулятора колонки я не видел.
claymen
08.02.2018 10:20Есть у них такой девайс Sonos Connect собственно говоря простой проигрыватель с линейным выходом, почему то «глючит» иногда по железу, перегревается, wi-fi b/g, в общем расбери с внешней звуковушкой ничуть не хуже, вот вопрос в ПО. Почему сонос, потому что есть колонки и надо подключить встроенную в стену старую акустику, покупать по Соносу на каждую колонку да еще с такими проблемами экономически не хочется… и большой он.
bellerofonte Автор
08.02.2018 10:31Правильно ли я понимаю, что Вы хотите на каждую колонку повесить по raspberry и «эмулятором sonos» синхронизировать воспроизведение с них?
claymen
08.02.2018 10:55Всё верно. Колонки встроены в потолок, в разных комнатах, давняя конструкция. И есть уже работающие колонки несколько штук, экономика важна. Обыскался похоже никто не сделал такой эмулятор. Все прекрасно понимаю что сонос может менять протокол, прошивки и все такое, но пока игра стоит свеч.
bellerofonte Автор
08.02.2018 11:02в комментариях к первому посту рекомендовали shairport-sync попробовать для синхронизации. Но, как понимаете, это только AirPlay. Готовое решение в голову не приходит.
sinyaya_boroda
08.02.2018 09:57А что лучше норм или средненько?
bellerofonte Автор
08.02.2018 10:06И то и то означает «не идеально, можно лучше/быстрее/удобнее». Это как сравнивать зубную боль и боль от удара мизинцем о шкаф. Лучше не испытывать ни то, ни другое.
past
08.02.2018 11:47Пытались сделать через https://github.com/masmu/pulseaudio-dlna?
bellerofonte Автор
08.02.2018 11:59Не совсем понимаю, зачем мне DLNA? или это относится к теме комментария claymen?
past
08.02.2018 12:21+1Да, я про " на каждую колонку повесить по raspberry и «эмулятором sonos» синхронизировать воспроизведение"
Синхронизировать можно через pulseaudio, а в сети выглядеть как один dlna media renderer.bellerofonte Автор
08.02.2018 12:30рабочий вариант
claymen
08.02.2018 14:08А с телефона через приложение Sonos управляется?
bellerofonte Автор
08.02.2018 14:16уверен, что ничего от Sonos в этом варианте вообще присутствовать не будет. past, я прав?
past
08.02.2018 14:59Да, только идея.
Контент в телефоне. "Стандартными" средствами плеера выбираете играть на рендерере.
pistoletov
09.02.2018 08:55+1Я сделал мультирум радио на связке от логитеч. В сердце кубиборд на а10 и два аудиоустройства. Могут работать как отдельно так и синхронно. На кубике стоит LMS и squuezelite по одному на устройство. Управление с ios сторонним клиентом ipeng (платный но красивый).
dernuss
Интересно, такое возможно поднять на esp32 ?
kAIST
Да, есть проекты, как на esp32, так и обычный esp8266 тянет с отдельным модулем декодера mp3 (стоит копейки).
bellerofonte Автор
Да. 5 минут гугления выдают проект на github для воспроизведения интернет-радио и еще один проект для работы веб-сервера. Очевидно, что то и то можно совместить.