димачка пишет

иногда мне кажется, что в жизни я занимаюсь чем-то не тем. поэтому сегодня вы узнаете, как завести airplay или спотифай на вашей фсбшной колоночке.


зачем, если есть блютуз?

честно? главный аргумент — блютуз меня бесит. и тебя, скорее всего, блютуз полностью устроит — пользуйся, я не осуждаю. но если ты всё же дочитал, вот по делу:

  • телефон перестаёт быть проводом. по блютузу твой телефон — это и есть звуковая труба: любой дзиньк уведомления, звонок, звук из ютуба и рандомной игры летит прямо в колонку. отошёл в другую комнату — музыка отвалилась. по airplay колонка сама тянет поток по wi-fi, а телефон свободен: можно принять звонок, уйти на кухню, кинуть телефон на зарядку — играет дальше.
  • дальнобойность. wi-fi добивает по всей квартире, блютуз — метров 10 и то пока стенка не встанет.
  • мультирум. можно лить на несколько колонок сразу и группировать их. блютуз — это всегда один-на-один. правда, с music assistant никто не гарантирует качественного мультирума из-за буферизации потока, об этом в конце этой простыни.
  • никаких танцев с сопряжением. любое устройство в сети видит колонку, не надо каждый раз коннектиться и выяснять, к чьему телефону она сейчас прицепилась.
  • качество. wi-fi по полосе несравнимо шире. блютуз режет звук кодеком (sbc/aac, лосси, ещё и пережимает). airplay несёт alac вплоть до 16 бит / 44.1 — то есть без второго пережатия поверх и так не lossless-источника.

а спотифай — это вообще другое: подрубаешь колоночку прямо из приложения (примерно как это сделано в приложении яндекс музыки) и рулишь всей своей библиотекой спотифай прямо на станции.


что понадобится

домашний сервер, например на убунте. на нём поднимаем Music Assistant с кастомной интеграцией ma-provider-yandex-station — она пока не в официальном репозитории MA (когда-нибудь будет, автор уже льёт PR-ы в апстрим, но пока копируем исходнички ручками).

провайдер общается со станцией по локальному протоколу Glagol (тот самый недокументированный вебсокет в яндекс станции), даёт полноценное управление — play/pause/next/перемотка/громкость — и сам находит колонки в сети по mDNS. это не блютуз и не проброс через облако, всё локально.


шаг 1. ставим Music Assistant с провайдером станции

клонируй репозиторий провайдера, там лежит docker-compose.dev.yml. поднимай его:

docker compose -f docker-compose.dev.yml up -d

либо поправь compose под себя. например, в нём по умолчанию nightly-билд MA — можешь заменить на стабильный:

image: ghcr.io/music-assistant/server:latest

вся магия внутри: compose монтирует исходники провайдера в контейнер, а скриптик на старте линкует их в нужную папку MA и доставляет зависимости.

и не забудь: – network_mode: host — обязателен, иначе не будет ни обнаружения колонок, ни звука (в dev-compose он обычно уже прописан, но проверь). – сервер, станция и телефон — в одной плоской сети без vlan (mDNS через них не ходит). хотя, если ты знаешь что такое vlan, то ты это понимаешь.


шаг 2. добавляем станцию как плеер

заходим на http://<ваш_сервер>:8095, регистрируемся.

идём в Settings → Player Providers → Add a player provider → Yandex Station. логин через девайс-код или qr — мне было удобнее через qr. под капотом провайдер получит долгоживущий токен, им он и авторизуется на колонке.

прожимаем снизу сохранить.

всё — теперь ваши фиолетовые товарищи майоры добавлены как колонки в Music Assistant, и на них можно транслировать любую музыку из MA.


шаг 3. подрубаем AirPlay

добавляем первый плагин: Plugins → Add a plugin → AirPlay Receiver.

  • Connected Music Assistant Player — выбираем алисоньку из списка (это плеер, на который приёмник будет переливать звук).
  • AirPlay device name — так колонка будет называться в списке устройств.

сохраняем. теперь можно транслировать звук с любого устройства из яблочной экосистемы.

честно: плагин пока в раннем бете, добавлять его надо отдельно под каждый плеер, и иногда он капризничает. работает — да и ладно. иногда нестабильно, иногда не подключается. такова цена жизни в чужой закрытой экосистеме, которую мы любим.


шаг 4. Spotify Connect

добавляется там же, в Plugins. думаю, не заблудитесь в трёх кнопках. так же выбираем алисоньку как connected player.

что стоит знать заранее: – нужен Spotify Premium (плагин работает через librespot, а он с бесплатными аккаунтами не дружит). – команды из приложения долетают с задержкой 0.5–5 секунд — звук буферизуется и переливается на колонку, так что метадата иногда бежит впереди звука. это норма для такой схемы.


как это вообще работает (для любознательных)

и airplay, и spotify connect тут — это плагины-приёмники. MA притворяется колонкой: телефон/приложение думают, что играют на «устройство MA», а Music Assistant буферизует входящий поток и переливает его на реальную станцию по Glagol.

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


вот таким пердолингом я и занимаюсь. но оно работает. звезду на репозиторий уже поставил, жду, когда провайдер добавят в официальный реестр — тогда весь этот кастомный образ можно будет выкинуть и жить на чистом MA.

а чем вы занимаетесь в свободное время?