В прошлом году я обозревал сетевую колонку Xiaomi Mi Smart Network Speaker, умеющую проигрывать музыку как по кабелю и Bluetooth, так и по DLNA и AirPlay протоколам, будучи подключенной к Wi-Fi сети. А в этой статье хочу рассказать как при помощи одноплатного компьютера можно сделать любую колонку или акустическую систему сетевой, добавив в нее поддержку протокола AirPlay.
Данный протокол используется в устройствах компании Apple и позволяет буквально парой прикосновений к экрану смартфона или планшета переключать воспроизведение со встроенного динамика на внешнюю акустику. При этом саму акустическую систему не нужно как-то настраивать — достаточно, чтобы она была подключена к той же локальной сети, а дальше iPhone сделает все сам.
Содержание
Что нам понадобится
Для осуществления описываемых в этой статье действий понадобится:
- Raspberry Pi 3 Model B
- Локальная сеть
- iPhone, iPad или iTunes на компьютере
- Наушники или колонки, подключаемые к 3.5мм аудиоразъему
- Звуковая карта для Raspberry Pi (опционально)
- Дисплей для Raspberry Pi (опционально)
Удаленно управлять «малиной» удобнее всего по SSH или через Webmin.
Установка и настройка Shairport Sync
Для поднятия на Linux-системах AirPlay-приемника используется приложение Shairport Sync, в свою очередь являющееся форком уже заброшенного и не обновляющегося Shairport.
Перед началом установки традиционно обновим уже установленные в системе пакеты:
sudo apt-get update sudo apt-get dist-upgrade
Теперь установим все необходимое для работы Shairport Sync:
sudo apt-get install build-essential git autoconf automake libtool libdaemon-dev libasound2-dev libpopt-dev libconfig-dev avahi-daemon libavahi-client-dev libssl-dev
Скопируем с гитхаба репозиторий с исходным кодом:
git clone https://github.com/mikebrady/shairport-sync.git
Перейдем в папку с исходниками, сконфигурируем и соберем приложение:
cd shairport-sync autoreconf -i -f ./configure --sysconfdir=/etc --with-alsa --with-avahi --with-ssl=openssl --with-metadata --with-systemd make
Создадим отдельную группу и отдельного пользователя специально для Shairport:
getent group shairport-sync &>/dev/null || sudo groupadd -r shairport-sync >/dev/null getent passwd shairport-sync &> /dev/null || sudo useradd -r -M -g shairport-sync -s /usr/bin/nologin -G audio shairport-sync >/dev/null
Установим приложение и запустим в качестве системного сервиса:
sudo make install sudo systemctl enable shairport-sync
Теперь осталось только перезагрузить Raspberry Pi и все готово:
sudo reboot
Если установка пакета прошла успешна, то после перезагрузки в списке доступных AirPlay-устройств на iPhone/iPad или в iTunes появится новая колонка с именем Raspberrypi.
И если подключить к «малине» акустику, то можно воспроизводить через нее музыку с любых девайсов от Apple.
Но для более комфортного пользования нужно произвести некоторые настройки.
Отключение энергосбережения Wi-Fi
Если Raspberry Pi 3 подключена к локальной сети по Wi-Fi (к слову, при возможности лучше подключать кабелем по Ethernet — стабильнее будет работать), то нужно отключить энергосбережение Wi-Fi адаптера. Иначе при отсутствии сетевой активности адаптер будет пытаться уйти в режим сна и в это время «малинка» будет пропадать из списка AirPlay-устройств.
Поэтому отредактируем файл конфигурации:
sudo nano /etc/network/interfaces
Найдем в нем строку «iface wlan0 inet manual» и добавим сразу же после нее следующую строку:
wireless-power off
На этом данная часть настройки завершена.
Улучшение качества звука
Встроенная звуковая карта в Raspberry Pi 3 оставляет желать лучшего, а установленный по умолчанию драйвер и вовсе ужасен. Если планируется использовать «малину» в качестве AirPlay-ресивера для действительно хорошей акустики, то есть смысл докупить к ней хорошую звуковую карту (такие производит, например, Suptronics).
Во всех остальных случаях нужно хотя бы сменить стандартный драйвер на более свежий, который уже входит в дистрибутив Raspbian, но выключен по умолчанию.
Для этого открываем файл config.txt:
sudo nano /boot/config.txt
И дописываем в конец следующую строку:
audio_pwm_mode=2
Затем нужно будет перезагрузиться. После перезагрузки «малина» заработает уже с другим драйвером и звук на 3.5мм аудиовыходе станет более-менее приличным.
Для еще одного улучшения качества звука нужно исправить файл конфигурации самого Shairport Sync:
sudo nano /etc/shairport-sync.conf
В котором нужно найти строку:
// volume_range_db = 60 ;
И заменить ее на строку:
volume_range_db = 30 ;
Обратите внимание, что нужно не только поменять значение с 60 на 30, но и удалить два слеша в самом начале строки, т.е. раскомментировать этот параметр.
Изменение названия AirPlay-ресивера
Изначально наша AirPlay-колонка будет носить сетевое имя устройства, на котором развернут Shairport (в случае с «малиной» это имя по умолчанию Raspberrypi).
Если хочется дать ей более звучное название, то нужно отредактировать файл конфигурации:
sudo nano /etc/shairport-sync.conf
Найти в нем строку:
// name = "%H"
Раскомментировать эту строку и ввести вместо %H свое название:
name = "My AirPlay Speaker"
Установка графического интерфейса для Shairport Sync
Если к «малине» подключен мини-дисплей, то можно приспособить его для вывода метаданных о транслируемых треках.
Для этого нужно загрузить еще один репозиторий:
git clone https://github.com/tchapi/shairport-sync-ui
Установить фреймворк Qt:
sudo apt-get install qt4-default
И скомпилировать его из исходников:
cd shairport-sync-ui ./compile.sh && ./run-gui.sh
А затем добавить в автозагрузку, отредактировав файл конфигурации:
sudo nano ~/.config/lxsession/LXDE-pi/autostart
И внеся в него следующую строку перед строкой @screensaver:
@/home/pi/shairport-sync-ui/build/release/shairport-sync-ui
А затем отредактировать конфигурацию shairport:
sudo nano /etc/shairport-sync.conf
Найдя в файле строки:
metadata = { // enabled = "no"; // include_cover_art = "no"; }
И заменив их на:
metadata = { enabled = "yes"; include_cover_art = "yes"; }
Вот так выглядит графический интерфейс. Если запустить воспроизведение, то в нем должны появиться названия композиции и альбома, имя исполнителя и обложка. Но у меня что-то пошло не так, и при старте воспроизведения интерфейс вылетает (на само воспроизведение это не влияет).
Возможно нужно еще покопаться в конфигурации, дополню статью если найду рабочее решение.
Заключение
Использование Shairport Sync позволяет превратить любую колонку в сетевую, поддерживающую протокол AirPlay. Особенно полезным это окажется если в наличии имеется качественная, но старая акустика без смарт-функций, которую хочется подружить с современной техникой.
В статье приведен пример установки Shairport Sync на Raspberry Pi 3, но аналогичным способом программу можно установить и на любой другой одноплатный компьютер, например, на более дешевый и компактный Orange Pi Zero.
Raspberry Pi 3B (английская сборка)в интернет-магазине GearBest Raspberry Pi 3B (китайская сборка)в интернет-магазине GearBest
Отличная статья!!! Спасибо!
Привет.
А проблем с «заиканиями» и «исчезновением» малинки из сети нет?
Настраивал данную связку пару лет назад, но нормально слушать не получалось.
Грешил на сеть, но потом пробовал транслировать на устройство, которое из коробки поддерживает AirPlay и таких проблем не фиксировал. Сейчас сижу на ChromeCast Audio — по началу тоже были непонятные проблемы, но решились заменой маршрутизатора в сети.
Привет, заиканий при Ethernet-подключении вроде не замечал. А по Wi-Fi иногда даже SSH-соединение притормаживает, встроенный адаптер не очень хороший.
По поводу «исчезновений» — чтобы малина прям пропадала и не появлялась такого не было. Но бывает, что айфон ищет ее 2-3 секунды. На колонке Xiaomi с поддержкой AirPlay из коробки так же бывает, судя по всему это вариант нормы.
Всё очень подробно и предельно понятно, спасибо большое!
Одно замечание: файл /etc/network/interfaces изменён в версии прошивки 4.14.39-v7+ #1112
Там нет строки «iface wlan0 inet manual»
Спасибо! Делал это упражнение, но тогда меня не устроила рассинхронизация воспроизведения на источнике и на колонке. Для музыки это неважно, а вот для фильмов — очень. И в тот раз я не смог корректно скомпенсировать эту задержку на уровне настроек delay. Сейчас разработчик пишет про некое улучшение синхронизации. Так ли это?
Я пробовал воспроизводить только музыку, звуковую дорожку фильмов по AirPlay транслировать не пробовал.
Посмотрю в свободное время и отпишусь в комментариях как обстоит дело с синхронизацией.
Приветствую!
Посоветуйте как грамотно оставить подключение pi3 к интернету по кабелю, отключить wi-fi на ней, но чтоб Air-play продолжал работать? (по совету из статьи «(к слову, при возможности лучше подключать кабелем по Ethernet – стабильнее будет работать)»). Почему-то был уверен, что для эир-плея необходим активный вай-фай на устройстве??)
Заранее спасибо!
Добрый день. Так а в чем трудности? Можно просто отключить Wi-Fi адаптер в настройках Raspbian, тогда при подсоединении Ethernet-кабеля микрокомпьтер сразу подключится по нему к локальной сети.
Здравствуйте! Это по первой версии AirPlay работает или по второй?!
Если по первой, о не актуально. Так, как во второй, устройства интегрируются в приложение дом и имеют возможность голосового управления. При наличии подписки музыки, можно просто голосом ставить любую музыку или ту, которая в библиотеке. Что несравненно удобнее, поиска и тыкания пальцем.
Здравствуйте, тут про первую версию AirPlay.
Поддержку AirPlay 2 можно сделать при помощи Logitech Media Server и плагина ShairTunes2, но сам я еще не пробовал.
подойдет rpi zero w ?
есть у нее вывод звука аналогового?
там нет lan, как настраивать подключение к wifi? т.е. как подключиться первый раз по ssh??
Кинуть в корневой каталог microSD-карточки с системой пустой файл ssh (без расширения) и файл wpa_supplicant.conf с таким содержанием:
network={
ssid=»НАЗВАНИЕ ТОЧКИ ДОСТУПА»
psk=»ПАРОЛЬ»
}
Если сразу не подключится к Wi-Fi, то добавить еще строчку country=RU внутри фигурных скобок
На этот пункт сразу забыл ответить. Аналогового выхода у Zero W нет, только HDMI. Любо подключение внешней звуковой карты (USB, GPIO).
Спасибо за статью! Получилось! А можно ли нагрузить устройство air play на raspberry 3b еще и функцией Time Capsule совместно с воспроизведением?
Можно, только данные будут копироваться не очень быстро
Спасибо за ответ! Понимаю, что не быстро. С другой стороны никуда не спешу, и Time Capsule с AirPlay было очень удобным устройством) Не сложно дописать Вашу полезную статью? Уверен, людям будет полезно!
Здравствйте, как удалить графическую орболочку, она увела в бл.к-аут мою систему, я юзаю Пи для множества задач и просто хотел сервер поднять, но не знал, что UI полностью заполнить мне скрин черным, я могу вызвать только терминал по хоткею, что написать, что бы полностью вернуть все как было?
Спасибо.
Добрый день. Нужно отключить автозапуск, отредактировав конфиг:
И удалив из него добавленную строку:
Т.е. выполнить обратное действие тому, что было описано в статье.
Я удалял, не помогло, кстати, в этом файле было вообще пусто и никакой строки @screensaver не было, как по инструкции. Еще есть варианты, почему у меня в Распбиан пропала оболочка рабочего стола?
в rpi 4 и видимо с какой-то версии raspbian новый драйвер по умолчанию, ничего прописывать в boot/config/txt не надо
https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=195178&start=25#p1270324
Добрый день. Попробовал, и все получилось. Спасибо за интересный и подробный рассказ. Но у меня тоже малинка заикается.
Подскажите, пожалуйста, какими командами все то, что я установил, теперь снести, чтобы следов не осталось?
При сборке приложения из исходников чтобы следов гарантированно не осталось надо делать бэкап перед установкой и откатываться на него. Прямо все вычистить не всегда может получиться.
Но чтобы просто удалить установленное нужно выполнить команды:
Как не крутил. на голой системе не смог добиться громкости. Еле слышно. При этом плагин Spotyfy для НА прекрасно громко отдает звук. Нет ли идей? Весь конфигурации перелопатил.