Pi-Sonos v2.0 or the evolution of Internet radio on the Raspberry Pi
As you know, there is no limit to perfection. Even for homemade portable acoustics, whose user audience includes only one person. A very demanding and in some places manically stubborn person. After the release of the first post about Pi-Sonos, almost 5 months have passed. During this time, the software inside this acoustics has changed dramatically twice. The reason for the changes were both useful tips habravchan and own UX.A bit of history for those who are too lazy to read or who have already forgotten the first article.
Pi-Sonos – это самодельная компактная акустика, на создание которой меня вдохновила Sonos Play 1. Задача этой акустики, прежде всего, была в том, чтобы воспроизводить музыку из интернет-радиостанций. При ее создании я поставил во главу угла минимализм и удобство: воткнул в розетку, а дальше в любом месте дома управляй музыкой со смартфона/компа/планшета.
What is this article about
Прежде всего, об упорстве и любознательности на пути к идеалу. Под катом, username, не будет ни решения какой-то глобальной проблемы, ни описания новой уникальной технологии. В статье, всего лишь, излагается сравнение популярных медиа-центров для Raspberry Pi, раскрываются их достоинства и недостатки, а также мое персональное видение оптимального фреймворка для интернет-радиоприемника. По сути, прорабатывая собственный софт для колонки, я всего лишь частично повторил путь создателей Volumio, просто реализовав с нуля всего одну из его функций (читай: “изобрел очередной велосипед”).
Несмотря на то, что статья затрагивает тему разработки ПО, кода в ней нет, потому что цель статьи описать идею и функционал, а не процесс его реализации. Если тема кода будет интересна хабравчанам, я постараюсь осилить отдельную статью с описанием процесса разработки.
Несмотря на то, что статья затрагивает тему разработки ПО, кода в ней нет, потому что цель статьи описать идею и функционал, а не процесс его реализации. Если тема кода будет интересна хабравчанам, я постараюсь осилить отдельную статью с описанием процесса разработки.
Initially, the soft-stuffed acoustics was OSMC , but wise people in the comments noticed that Kodi (aka OSMC) is too fat as “brains” for an Internet radio station. Too smart and big, only Volumio is better suited for audio projects . Actually, everything turned out well. Volumio is lighter, sharpened by a web interface and has a more advanced and easy-to-use API. There is also no need for an HDMI cable sticking out of the back, since Volumio is fully customizable in any browser.
However, Volumio also discovered a couple of important flaws that prompted me to further research. This is, firstly, the download time, and secondly, the lack of autoplay. After studying the official documentation(from which it can be understood that Volumio is an add-on for mpd (Music Player Daemon)), I decided that it was time to write my own wrapper called jpi-radio on js that would solve these problems. The server part of it works on Node.js, and the client part (GUI) that uses React.js has been ready since the days of using OSMC, it only needed to be tweaked a bit. So it looks on the screen of the smartphone at the moment:

Below is a table that clearly shows the advantages and disadvantages of each of the frameworks.
| Criterion | |||
|---|---|---|---|
| Load time | |||
| Autoplay on launch | |||
| Number of tapes from the home screen of the “native” GUI on the smartphone to select a radio station from the Favorite list ** | |||
| The need for a monitor, keyboard and mouse *** | |||
| Web management | |||
| Edit station list | |||
| Easy initial setup | |||
| Integration with my GUI to control from a smartphone | |||
| Ease of daily use |
** for OSMC and Volumio, these are very important parameters, because all these tapas-scrolls must be made each time the column is turned on. For RPi-Radio, this parameter, although minimal, is still not so important, since the column starts playing itself when turned on.
*** meaning the physical connection of the monitor, keyboard and mouse to the Raspberry Pi itself, i.e. those cases where there is no way to get by with the built-in web interface or ssh connection.
Under this spoiler a detailed explanation of each comparison item is hidden.
Время загрузки 20 секунд – это, по моему мнению, минимум, который можно достичь, не погружаясь в дебри оптимизации Raspbian под этот проект. Именно столько времени требуется «малинке», чтобы загрузить ОС и запустить сервис mpd. Вероятно, этот результат может быть улучшен, если заменить microSDHC на microSDXC с большей скоростью чтения/записи (проверю при возможности). Удивительно, но Volumio, притворяющийся легким и шустрым, грузится дольше монстра-комбайна OSMC. 45 секунд ожидания находятся за порогом комфортной эксплуатации, и это было основной причиной ухода от Volumio.
Автовоспроизведение присутствует в 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- сервер на базе связки
Автовоспроизведение присутствует в 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 sources are published on Github . In the same repository, in the corresponding branches, you can find both GUI adaptations for working with OSMC and Volumio.
The result of my Exercises, RPi-Radio, goes beyond a simple addition to a single column that exists in a single copy. This is a kind of ready-made solution that turns into an Internet radio not only the Raspberry Pi, but also any device with audio output, Internet access and the ability to run mpd and Node.js. The main advantage of such a system is the absence of everything superfluous. Actually, as it is done in Sonos, in the ideal that I strive to achieve.