Сетевой аудиоплеер на основе Raspberry Pi
Ноутбук - мой самый основной инструмент дома. А так как этот тип компьютера подразумевает мобильность, то каждый подключенный к нему провод, убивает напрочь эту мобильность. Поэтому со временем я обзавелся беспроводной мышью, потом купил Raspberry Pi, сделал на его основе принт-сервер, и вот из всех проводов остались только кабель питания и аудио-кабель, идущий к усилителю. Если питание ноутбука на сегодняшний день беспроводным никак не сделать, то вот воспроизведение аудио возможно сделать дистанционным. В данной заметке я расскажу, каким образом я это организовал.
Прошу заметить, что описанный вариант не единственно верный. Я всего лишь хочу рассказать как именно сделал я.
Поиск решения
Как я уже говорил, у меня есть одноплатный компьютер Raspberry Pi 2B. Покупал я его, чтобы поиграться и понять, что это вообще такое. Первым делом сделал из него принт-сервер, благо инструкций в интернете достаточно. А так как принтер и усилитель у меня стоят рядом, то было бы логично использовать Raspberry для воспроизведения звука. Поначалу я искал способ заставить его обнаруживаться моим ноутбуком как внешняя сетевая аудиокарта, чтобы можно было бы все звуки воспроизводить через нее. Но такого я не нашел, зато нашел такую вещь как MPD (music player daemon). Это музыкальный проигрыватель, имеющий клиент-серверную архитектуру. На стороне Raspberry устанавливается сервер, а на стороне ноутбука клиент - проигрыватель, который звук отправляет на сервер. Вариант рабочий, но ни один плеер мне не нравился.
Смартфон, которым я пользуюсь - iPhone (а также у брата, который тоже пользуется моей стерео-системой). А у Apple есть готовая технология AirPlay, обеспечивающая беспроводную потоковую передача медиаданных, будь то аудио, видео или изображения. Почему бы не попробовать задействовать ее? Для этого нужно решить две проблемы - во-первых, заставить Raspberry работать как AirPlay приемник, во-вторых, найти на Windows плеер, поддерживающий AirPlay. Apple устройства поддерживают эту технологию "из коробки".
Решением первой проблемы является установка приложения Shairport AirPlay. Ниже я привел инструкцию по его установке и по настройке Raspberry Pi в качестве AirPlay приемника.
Вторая проблема решилась очень просто - я нашел и купил для своего плеера foobar2000 плагин Remote Speakers Output (не реклама). Он платный, но стоит не очень дорого. Теперь можно выбрать в качестве приемника (который я назвал Amplifier) наш Raspberry, и на него будет транслироваться копия аудиосигнала. Но основное устройство вывода звука можно совсем отключить, если вы планируете использовать только получившийся сетевой плеер.
Но нужно отметить, что у AirPlay есть ограничение - поддерживается только CD-качество 44,1 кГц 16 бит, поэтому приходиться с этим мириться. С другой стороны, почти все мои аудиозаписи имеют именно такой формат.
Настройка Raspberry Pi как AirPlay-приемника
Монитора и клавиатуры для Raspberry у меня нет, поэтому все действия выполняются через консоль на удаленном ПК. ОС - Raspbian.
1. Откроем аудио микшер, чтобы убедиться, что звук не приглушен и его уровень составляет 0 дБ. Для этого вводится команда:
alsamixer
2. Далее проверим звук, запустив синус для воспроизведения:
speaker-test -t sine
3. Откроем файл конфигурации ALSA командой
sudo nano /usr/share/alsa/alsa.conf
и заменим строку
pcm.front cards.pcm.front
на
pcm.front cards.pcm.default
Сохраняем изменения (Ctrl+O) и выходим из редактора (Ctrl+X).
4. Далее установим приложение Shairport AirPlay, которое будет эмулировать конечное устройство AirPlay. Но перед этим необходимо установить несколько дополнительных модулей командами:
sudo apt-get install libao-dev libssl-dev git avahi-utils libwww-perl
sudo apt-get install libcrypt-openssl-rsa-perl libio-socket-inet6-perl libmodule-build-perl
5. После этого создадим каталоги, куда будем устанавливать Shairport AirPlay.
mkdir projects
cd projects
mkdir airplay-audio-project
cd airplay-audio-project
6. При необходимости установим модули для поддержки устройств на iOS6 командами:
git clone https://github.com/njh/perl-net-sdp.git
cd perl-net-sdp
perl Build.PL
./Build
./Build test
sudo ./Build install
cd ..
7. Скопируем Shairport AirPlay из репозитория и запустим следующими командами:
git clone https://github.com/abrasive/shairport.git
cd shairport
make
8. Теперь можно проверить работу приложения. Для этого введите:
./shairport -a RaspberryPi
Если все сделано верно, то на устройстве Apple появится приемник AirPlay с именем RaspberryPi.
9. Теперь установим Shairport AirPlay командой:
sudo make install
Следующие три команды дают возможность делать это автоматически при запуске Raspberry:
sudo cp scripts/debian/init.d/shairport /etc/init.d/shairport
sudo chmod +x /etc/init.d/shairport
sudo update-rc.d shairport defaults
10. Теперь сделаем кое-какие настройки. Для этого откроем файл настроек Shairport:
sudo nano /etc/init.d/shairport
Для автостарта приложения нужно строчку
DAEMON=/usr/bin/shairport
заменить на
DAEMON=/usr/local/bin/shairport
А также строки
USER=shairport
GROUP=nogroup
на
USER=pi
GROUP=pi
Для смены имени устройства (например на Amplifier) замените строку
AP_NAME=$(hostname)
на
AP_NAME=Amplifier
11. Для завершения настройки перезагрузите устройство командой
sudo reboot now
Для вывода звука с Raspberry Pi я использую не ее встроенную звуковую карту, а внешний ЦАП на основе PCM2707. А встроенный аналоговый звук я совсем отключил.
1. Откройте в редакторе файл /boot/config.txt
sudo nano /boot/config.txt
и закомментируйте (символом #) строку dtparam=audio=on, отключив тем самым аналоговый аудиовыход.
2. Далее установите USB звуковую карту устройством воспроизведения по умолчанию. Для этого откройте в редакторе файл /lib/modprobe.d/aliases.conf
sudo nano /lib/modprobe.d/aliases.conf
и закомментируйте строку options snd-usb-audio index=-2
3. Перезагрузите Raspberry Pi.
Заключение
Может быть для кого-то мое решение окажется полезным. При возникновении вопросов пишите, постараюсь помочь.
11 Комментариев
Рекомендуемые комментарии
Присоединяйтесь к обсуждению
Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.