Перейти к содержанию
  • запись
    31
  • комментария
    453
  • просмотр
    67 861

Сетевой аудиоплеер на основе Raspberry Pi


aitras

8 437 просмотров

Ноутбук - мой самый основной инструмент дома. А так как этот тип компьютера подразумевает мобильность, то каждый подключенный к нему провод, убивает напрочь эту мобильность. Поэтому со временем я обзавелся беспроводной мышью, потом купил 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, и на него будет транслироваться копия аудиосигнала. Но основное устройство вывода звука можно совсем отключить, если вы планируете использовать только получившийся сетевой плеер.

image.png.e48237497f98073652cf00c879f315e3.png

Но нужно отметить, что у 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

photo_2017-08-29_22-41-51.thumb.jpg.985f0b72fd614c9b30f9efbd6a278cbf.jpg

Для вывода звука с 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 Комментариев


Рекомендуемые комментарии

Очень полезная заметка!

Ты вывел звук с компа по псевдо AirPlay на малинку, а к малинке подключен транспорт на 2707 через USB, а можно ли использовать тот же ХМОС или Аманеро таким же образом? И конечно минус из этого всего что максимум можно послушать mp3 через это все :( а с IPhone звук идет? В него то можно и alac (если правильно помню) засунуть, или ограничение останется на том же уровне? Надо будет попробовать такую же схему вывода звука с Mac ноута на 2706.

Ссылка на комментарий
1 hour ago, getshket said:

А spdif можно вывести оттуда?

Можно. У меня к PCM2707 подключён мой ЦАП Mercury по I2S. 

1 hour ago, Artik said:

можно ли использовать тот же ХМОС или Аманеро таким же образом? И конечно минус из этого всего что максимум можно послушать mp3 через это все :( а с IPhone звук идет?

Если удастся установить драйвера, то может быть. Не уверен. 

Почему MP3? FLAC слушаю без проблем. FLAC тоже может быть 44.1 кГц, 16 бит. Перекодировка происходит не плагином, а на конечном устройстве.

С iPhone тоже можно воспроизводить. Правда на нем я музыку не храню, слушаю только из Apple Music. 

Ссылка на комментарий

Нашел такую информацию:

Quote

If iTunes is playing back a digital multichannel file format like AC3 (Dolby Digital) or DTS, those bitstreams (like the lossy formats) are wrapped in Apple's Lossless compression, encrypted, and then, streamed to the AX. In these cases, the AX would first decode the stream, and then, output the raw AC3 or DTS stream via its optical digital audio port.

Получается, что если воспроизводить lossless (только AC3 и DTS?), то он перекодироваться в 44,1 кГц не должен. Надо проверять.

Ссылка на комментарий

Мне интересно, можно ли с Mac повторить тоже самое но не с 2707 а с 2706.

 Я так понял для 2707 и 2706 драйверы не нужны, ты просто выбрал постоянный источник воспроизведения - 2707, единственное нужно правильно настроить малинку, Mac сам отправит звук на нее, а малинка уже выведет ее на 2706/07.

А где саму малинку брал?

Изменено пользователем Artik
Ссылка на комментарий

Да разницы вообще нет 2707 или 2706. На Mac'е вообще, думаю, ничего настраивать не надо.

Малинку на Ибее брал полтора года назад. А описанный плеер работает уже почти год.

Ссылка на комментарий

Подключил к Raspberry Pi в качестве транспорта плату Combo384. Все запело без установки дополнительных драйверов. Но есть щелчки :unsure: Такие же щелчки в Windows без ASIO.

Ссылка на комментарий

Нашел отличную программу для моих целей - Airfoil от Rogue Amoeba. Позволяет из-под Windows отправить как весь системный звук, так и звук отдельного приложения на устройство с AirPlay. Правда стоит немного денег.

2017-12-26_17-33-14.png.13c43d317190444b08e6192a225d7cdb.png

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Добавить комментарий...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

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

Загрузка...

×
×
  • Создать...