Разработка CodeX
4 437

Делаем AirPlay-станцию из старых колонок

Рассказываем, как мы в CodeX слушаем музыку с телефонов или ноутбуков, не подключая к ним никаких проводов.

В закладки

Конечно, можно просто купить колонку с Bluetooth или AirPlay, но, если у вас есть обычные старые колонки и Raspberry, то можно создать станцию самим. Мы сделали из Raspberry Pi аудио-ресивер и подключили его к локальной сети по Ethernet-кабелю, а колонки к ней — через обычный AUX.

Для настройки станции будем использовать AirPlay-аудиоплеер Shairport Sync.

Подготовка

Самая важная часть системы — одноплатный компьютер Raspberry Pi. В нашем случае Raspberry Pi 2 Model B. Подойдёт и любая другая версия, к которой при необходимости можно будет подключить 3,5 мм разъём, например, с помощью платы расширения.

Raspberry Pi 2 Model B

Для работы самого микрокомпьютера потребуется microSD-карта объемом от 4 ГБ, на которую необходимо установить операционную систему.

Установка ОС

Процесс установки осуществляется с помощью вашего рабочего компьютера — вставляем карту памяти, скачиваем одну из предложенных систем и с помощью программы Etcher загружаем её образ на карту памяти.

Более подробная инструкция по установке ОС на Raspberry — на официальном сайте.

Подключение по SSH

Чтобы иметь возможность подключаться к Raspberry с рабочего компьютера через терминал, после установки системы вам потребуется создать пустой текстовый файл с названием ssh (иногда ssh.txt) в корневой директории карты памяти.

Теперь подключаем Raspberry к локальной сети (вставляем Ethernet-провод) и включаем питание.

Давайте попробуем подключиться к Raspberry через терминал с другого компьютера. Для начала нужно узнать IP-адрес Raspberry, например, в панели администратора роутера — в разделе подключенных к сети устройств (Devices).

Обычно панель администратора роутера доступна по адресу http://192.168.1.1 или http://192.168.0.1, дефолтные логин и пароль указаны на роутере. Спросите параметры подключения к роутеру у вашего системного администратора.

Устройство Raspberry доступно по адресу 192.168.1.100

Для установки SSH-подключения потребуется найти в интернете стандартные логин и пароль для пользователя системы, которую вы установите на Raspberry.

Пусть IP-адрес — 192.168.1.100, а логин и пароль от ОС — pi / raspberry. Тогда подключиться к станции можно с помощью команды

ssh pi@192.168.1.100

Установка

Первым делом рекомендуется обновить список репозиториев пакетов и установить все обновления.

sudo apt-get update sudo apt-get upgrade -y

Теперь активируем обновлённый аудио-драйвер.

printf "\n# Set audio output to headphone jack\naudio_pwm_mode=2\n" | sudo tee -a /boot/config.txt

Устанавливаем зависимости для сборки и установки Shairport Sync.

sudo apt install -y \ build-essential \ git \ xmltoman \ autoconf \ automake \ libtool \ libdaemon-dev \ libpopt-dev \ libconfig-dev \ libasound2-dev \ libpulse-dev \ avahi-daemon \ libavahi-client-dev \ libssl-dev \ libsoxr-dev

Загружаем исходные файлы пакета.

git clone https://github.com/mikebrady/shairport-sync.git

Настраиваем и подготавливаем пакет к сборке.

cd shairport-sync autoreconf -i -f ./configure --sysconfdir=/etc \ --with-alsa \ --with-pa \ --with-pipe \ --with-avahi \ --with-ssl=openssl \ --with-metadata \ --with-soxr \ --with-systemd

Теперь приступим к компиляции и установке пакета.

make sudo make install

Остается только активировать автозагрузку и запустить сервис.

sudo systemctl enable shairport-sync.service sudo service shairport-sync start

Настройки Shairport Sync хранятся в файле /etc/shairport-sync.conf.

// Sample Configuration File for Shairport Sync // Commented out settings are generally the defaults, except where noted. // General Settings general = { // name = "%h"; // This means "Hostname" -- see below. This is the name the service will advertise to iTunes. // The default is "Hostname" -- i.e. the machine's hostname with the first letter capitalised (ASCII only.) // You can use the following substitutions: // %h for the hostname, // %H for the Hostname (i.e. with first letter capitalised (ASCII only)), // %v for the version number, e.g. 3.0 and // %V for the full version string, e.g. 3.0-OpenSSL-Avahi-ALSA-soxr-metadata-sysconfdir:/etc // Overall length can not exceed 50 characters. Example: "Shairport Sync %v on %H". ...

Например, можно задать имя, которое поможет идентифицировать этот ресивер. Для этого нужно раскомментировать строку и заполнить параметр name:

name = "CodeX Speaker";

После внесения правок в конфигурационный файл потребуется перезагрузить сервис Shairport Sync.

sudo service shairport-sync restart

Теперь устройства на iOS или macOS могут увидеть колонку в списке доступных аудиовыходов.

Остаётся подключить к Raspberry колонки и наслаждаться беспроводной трансляцией музыки.

Настройка громкости

Изначально громкость звука на Raspberry установлена не на самый максимум. Кому-то этого может не хватать. Давайте установим громкость ОС на 100%, чтобы управлять громкостью воспроизведения можно было только на телефоне или ноутбуке.

Список интерфейсов можно увидеть, выполнив команду amixer controls:

pi@raspberrypi:~ $ amixer controls numid=3,iface=MIXER,name='PCM Playback Route' numid=2,iface=MIXER,name='PCM Playback Switch' numid=1,iface=MIXER,name='PCM Playback Volume' numid=5,iface=PCM,name='IEC958 Playback Con Mask' numid=4,iface=PCM,name='IEC958 Playback Default'

Нас интересует интерфейс PCM Playback Volume. Задаём ему максимальное значение: amixer cset numid=1 100%

pi@raspberrypi:~ $ amixer cset numid=1 100% numid=1,iface=MIXER,name='PCM Playback Volume' ; type=INTEGER,access=rw---R--,values=1,min=-10239,max=400,step=0 : values=400 | dBscale-min=-102.39dB,step=0.01dB,mute=1

Теперь максимальная громкость музыки увеличится.

Надеемся, статья будет полезной. Подписаться на нас можно во «ВКонтакте» или Telegram — там мы делимся опытом и пишем небольшие заметки о веб-разработке.

Материал опубликован пользователем. Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "CodeX", "author_type": "editor", "tags": [], "comments": 11, "likes": 43, "favorites": 48, "is_advertisement": false, "subsite_label": "dev", "id": 68127, "is_wide": true, "is_ugc": false, "date": "Mon, 20 May 2019 16:41:58 +0300" }
{ "id": 68127, "author_id": 298676, "diff_limit": 1000, "urls": {"diff":"\/comments\/68127\/get","add":"\/comments\/68127\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/68127"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 235819, "last_count_and_date": null }

11 комментариев 11 комм.

Популярные

По порядку

Написать комментарий...
11

vc мимикрирует в habr. Ностальжи..

Ответить
2

Проще Apple TV 3 купить

Ответить
3

Вы не поняли, тут удовольствие от процесса. Купить можно все что угодно как вы помните из одного рекламного лозунга.

Ответить
1

Вот именно! Можно взять старую советскую колонку и сделать эйр плей) вот бы ещё время свободное было на это...

Ответить
0

DIY для тех у кого много свободного времени :)

Ответить
0

Ребят, а Spotify Connect ещё как-то таким способом можно подвязать?

Ответить
3

не пользуюсь spotify, поэтому не могу проверить, но, кажется, это то, что нужно

Ответить
1

Огонь! Жалко с месяцок назад при переезде пришлось оставить старческие колонки... Но! Походу на даче можно замутить. Автору респект, и да, подпишусь!

Ответить
1

sudo amixer cset numid=3 1

Ответить

Комментарий удален

0

Класс! Времени бы еще побольше или прокрастинации поменьше)

Ответить
0

цап встроенный в пи только говно и звук такой же

Ответить
0
{ "page_type": "article" }

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } } ]
Хакеры смогли обойти двухфакторную
авторизацию с помощью уговоров
Подписаться на push-уведомления
{ "page_type": "default" }