Делаем из старого усилителя многофункциональный медиа сервер с помощью Raspberry pi

    У кого из нас нет добротной техники из прошлого, которая работает так, как и не снилось множеству ширпотребных вещей из настоящего. Старые усилители, проигрыватели пластинок и радиолы. Да, было время, когда не умели делать хрупко и недолговечно в погоне за дешевизной. Эти вещи еще проработают долго. И звучание какого-нибудь старого усилителя будет радовать и нас и наших детей.

    Правда, в них отсутствует много всяких цифровых штучек. Разные flac и тому подобные форматы. Управление проигрыванием, музыкой и фильмами через телефон или компьютер. Возможность запустить музыку с Youtube, Last.fm или выбрать интернет радио. Удаленное проигрывание медиа через DLNA. Или просто возможность подключить ваш компьютер через Bluetooth и выводить весь звук через большие колонки. Или что там еще напридумывают нам в будущем для облегчения нашей аудиофильской жизни.

    Но что нам мешает использовать все эти технологии в старой технике? Да и почему обязательно в старой… У вас есть RCA, miniJack 3.5 или S/PDIF разъем на вашей магнитоле? Тогда мы идем к вам и … И делаем из старого усилителя многофункциональный медиа сервер с помощью Raspberry Pi. Подключаем нашу Raspberry Pi через RCA и обновляем нашу технику до "острия технологической атаки". Не обязательно использовать RCA. Найдите аналоговый или цифровой вход на своей технике и выберите нужную комплектацию вашей Raspberry Pi. Я буду рассматривать вопрос сугубо с практической точки зрения. Как настроить все быстро на Raspberry Pi? Ведь статей профессионалов об особенностях работы той или иной технологии достаточно, чтобы не останавливаться на этом. Я возьму в качестве примера Raspberry Pi и плату для цифровой обработки звука на основе чипа PCM 5102 A.

    Существует множество различных вариантов музыкальных DAC систем на любой вкус и цвет. Выбор — только за вами. Вот некоторые из них для Raspberry Pi. DAC — на русском ЦАП — цифро-аналоговый преобразователь. Я возьму один из самых недорогих аналогов данного устройства. Судя по различным отзывам на веб просторах, очень даже неплохо себя зарекомендовавшую PCM 5102 A . На ней 6 контактов, и мы с легкостью подключим ее к нашей Raspberry Pi через GPIO разъем. Причем, подойдет любая серия нашей Малинки. Ведь для проигрывания музыки производственных мощностей хватит и самой младшей из них — Raspberry Pi Zero. Хотя, без точных входных данных для любой поставленной задачи перед нашей Raspberry Pi, все относительно. И подобное утверждение является оценочным мнением автора. Далее для подключения к GPIO нашей платы используем следующую схему:

    BCK -> Pin 12 (GPIO18) 
    DATA(SCLK) -> Pin 40 (GPIO21)
    LRCK -> Pin 35 (GPIO19) 
    GND -> Pin 39 (GND)
    GND -> Pin 34 (GND) 
    VCC -> Pin 2 (5v) 

    И нам потребуется подключить драйвер устройства в config.txt :

    sudo nano /boot/config.txt

    меняем на:

    dtoverlay=hifiberry-dac 
    #dtparam=audio=on 

    Перезагрузимся у убедимся, что в журналах ядра все ок:

    dmesg |grep hifi

    И посмотрим нашу карточку через листинг доступных устройств alsa:

    aplay -l

    **** List of PLAYBACK Hardware Devices **** card 0: sndrpihifiberry [sndrpihifiberry_dac], device 0: HifiBerry DAC HiFi pcm5102a-hifi-0 [HifiBerry DAC HiFi pcm5102a-hifi-0] Subdevices: 1/1 Subdevice #0: subdevice #0

    Если что-то пошло не так, включаем режим отладки:

    sudo nano /boot/config.txt dtdebug=1

    И смотрим, что происходит:

    sudo dmesg sudo vcdbg log msg

    И, по идее, запустив плеер, допустим, mplayer с каким-нибудь mp3, можно услышать музыку через канал на вашей аппаратуре, к которой вы подключились.

    Подключаем Bluetooth

    Технология Bluetooth не устаревает и активно развивается. Bluetooth передатчики постоянно обновляют версию. Слушать музыку через нее в HiEnd качестве можно. Она рождена для использования радио канала с большой загруженностью радио эфира. Это немаловажно при использовании ее в городе для передачи медиа контента. Правда, при использовании встроенного передатчика… на Малинке не все гладко. И помехи при прослушивании музыки через нее могут быть слышны. Как вариант — использовать внешнюю USB Bluetooth антенну. Она позволит избежать потерь, что, в общем-то, — отдельная тема, требующая изучения. И тем не менее, достаточно просто и быстро через Bluetooth пробрасывать звук. Скажем, с компьютера на Raspberry Pi и далее — через усилитель на колонки. Или с телефона подключаться в Raspberry и слушать музыку. Поэтому, запускаем Bluetooth на Малине. Для запуска нам понадобятся три компонента…

    Bluetooth сервер

    Pulse-audio

    Bluetooth клиент

    Это не обязательный набор, но, как показала практика, все три компонента позволяют быстро и прозрачно запускать Bluetooth на Raspberry Pi. В результате, мы должны получить три работающие службы:

    bluetooth.service

    bt-agent.service

    pulseaudio

    Первая используется как серверная часть, Bt-agent как блютуз клиент для обработки входящих запросов по авторизации. Это удобно для автоматизации процессов подключения без заморочек ручного подключения к нашему каналу. И pulse аудио как сервер, обрабатывающий звук, и как прозрачная прослойка для автоматического перенаправления его между устройствами. Установим необходимые пакеты: sudo apt-get install pulseaudio pulseaudio-module-bluetooth bluez-tools

    Bключим в группы pulse-access bluetooth пользователя pi:

    sudo usermod -a -G bluetooth pi

    sudo usermod -a -G pulse-access pi

    sudo adduser pi pulse-access

    Запускаем при старте аудио сервер pulseaudio:

    systemctl --user enable pulseaudio

    Для работы нашей Малины в режиме блютуз с постоянным обнаружением и с профилем A2DP приемника поправим конфигурацию:

    sudo nano /etc/bluetooth/main.conf

    и в нем:

     … 
    Class = 0x41C 
    … 
    DiscoverableTimeout = 0 A2DP

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

    И Class = 0x41C в соответствии с этим ресурсом соответствует параметрам:

    Major Device Class -> Audio/Video

    Minor device class -> Portable Audio

    Это те параметры, которые будут видны сканирующему Bluetooth устройству, чтобы разобраться, какие сервисы доступны через это устройство. В общем, можно не заморачиваться этими параметрами и выставить, например, Class = 0x20043C Что просто будет соответствовать большему количеству сервисов. Если вас вдруг не устраивает звук, тогда переходим к настройкам звука pulseaudio:

    sudo nano /etc/pulse/daemon.conf

    и смотрим "основные" настройки типа:

    ; resample-method = speex-float-1 
    ; default-sample-format = s16le
    ; default-sample-rate = 44100 
    ; alternate-sample-rate = 48000

    В качестве мануала по pulseaudio есть неплохой ресурс.

    Кто-то рекомендует resample-metod=ffmpeg или resample-metod=speex-float-9, решать вам, если услышите разницу. Выставляем нужные параметры и убираем ";" чтобы раскомментировать строчку.

    После изменений перезапускаем pulseaudio:

    pulseaudio -k && pulseaudio --start

    И не забываем посмотреть, сколько процессорного времени отъест pulseaudio при ваших HI-FI настройках:

    htop

    По загрузке процессора 3-ей Raspberry Pi с использованием ЦАП (DAC) аудио платы на основе микросхемы PCM5102 файл flac 24bit читается с загрузкой около :

    10-15% для resample-metod=speex-float-1

    30% для resample-metod=ffmpeg

    60% для resample-metod=speex-float-9

    Ну и напоследок, посмотрим теперь в сторону передачи звука через WiFi с помощью технологии DLNA.

    MiniDLNA сервер

    Если у вас на вашей Raspberry Pi находится медиа сервер, то для того чтобы ваша коллекция музыки была видна на других устройствах, поддерживающих DLNA, вам необходимо установить DLNA server. Здесь все просто: sudo apt-get install minidlna Рекомендую ознакомиться с возможностями Minidlna здесь.

    В файле конфигурации правим папку с нашей медиатекой:

    sudo nano /etc/minidlna.conf

    И там указываем правильно папку:

    media_dir=/home/pi/Music

    Права на папку должны быть следующими:

    sudo chmod -R 755 папка

    Проверяем командой:

    sudo -u minidlna ls -l папка

    Cтартуем сервис:

    sudo sevice minidlna start

    И теперь в нашем проводнике в закладке сеть должно быть что-то вроде:

    И, кликая на эту ссылку, открываем в браузере статус нашего сервиса:

    А проиграть файлы можно скажем через "проигрыватель windows media":

    Или запустить их на андроид с помощью "HI-FI Cast" приложения:

    Если задача обратная и мы хотим воспроизводить музыку и фильмы, просматривать фото, которые находятся где-то удаленно на сервере через нашу Raspberry Pi, то нам потребуется установить на нее dlna render. С устройства из приложения, позволяющего находить наш raspberry media render, мы будем перенаправлять медиа контент на Raspberry Pi.

    Я нашел два рендера прекрасно работающих на Raspberry Pi. У каждой из них есть свои плюсы.

    DLNA Render Gmediarenderer

    Проект развивается и полон последователей. Из основных возможностей стоит отметить что, этот рендер переключает устройства вывода, настраивает громкость и имеет уникальный идентификатор. Это позволит настроить в сети несколько подобных устройств. Есть более подробная статья про использование всех возможностей DLNA/UPnP как распределенной структуры устройств, взаимодействующих по этим протоколам и конкретно этого рендера. Инсталляция не должна вызвать сложностей. Проинсталлируем необходимые пакеты и gstreamer как движок для нашего рендера:

    sudo apt-get install autoconf automake libtool git
    sudo apt-get install libupnp-dev libgstreamer1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly  gstreamer1.0-libav
    sudo apt-get install gstreamer1.0-alsa sudo apt-get install gstreamer1.0-pulseaudio

    Возьмем копию проекта и соберем его:

    git clone https://github.com/hzeller/gmrender-resurrect.git 
    cd gmrender-resurrect 
    ./autogen.sh 
    ./configure 
    make 
    sudo make install

    и запускаем:

    gmediarenderer

    Найти и управлять нашим сетевым проигрывателем через Android устройство удаленно позволит программа типа DLNA Controller. Воспользуйтесь одной из подобных программ для этого: HiFi Cast, Airpincast, Bubbleupnpcast

    Rygel DLNA Рендер

    https://wiki.gnome.org/Projects/Rygel

    Проект представляет из себя не только dlna рендер. Это полноценный медиа сервер UpnPMedia Server, который позволит и расшаривать и перенаправлять музыку видео и фото на любое UPnP/DLNA поддерживающее устройство. Из заявленных возможностей есть конвертация на лету записи в тот формат, который будет поддерживаться устройством воспроизведения. Взаимодействие со сторонними media плеерами такими как Totem, Rhythmbox, VLC. Удаленные запросы UPnP конвертируются в MPRIS запросы и позволяют взаимодействовать с этими media проигрывателями. Пример такого взаимодействия Rygel и VLC рассказан на странице David Wiencer.

    Суть в том, что мы запускаем VLC плеер. Устанавливаем в конфигурационном файле mpris поддержку. И при работающем Rygel приложении vlc воспроизводит медиа контент, который мы посылаем ему через DLNA Rygel.

    Проинсталлируем Rygel и VLC:

    sudo apt-get install rygel vlc rygel-playbin

    Если у вас еще не стоят gstreamer библиотеки:

    sudo apt-get install libupnp-dev libgstreamer1.0-dev  gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly  gstreamer1.0-libav 

    Убедимся, что в конфигурации включена поддержка MPRIS:

    nano ~/.config/rygel.conf

    [general]
    upnp-enabled=true
    enable-transcoding=false
    [Tracker]
    enabled=false
    [MediaExport]
    enabled=false
    [Playbin]
    enabled=false
    [GstLaunch]
    enabled=false
    [MPRIS]
    enabled=true
    [External]
    enabled=false

    И далее, создаем скрипт David Wiesner, который запускает сначала VLC затем Rygel:

    sudo nano rygel-vlc.sh

    И в нем:

    #!/bin/bash
    vlcCall="vlc – intf dummy – fullscreen – no-osd"
    function cleanup(){
    for pid in $(pgrep -f "$vlcCall"); do
    kill -9 $pid
    done
    killall rygel
    }
    function waitCpuDecrease(){
    pid=$1
    lastCpu="0.0"
    while true; do
    cpu=$(ps S -p $pid -o pcpu=)
    sleep 0.2
    [ $(bc <<< "$cpu < $lastCpu") == 1 ] && break
    lastCpu=$cpu
    done
    }
    killall rygel and vlc
    cleanup
    launch vlc in background
    $vlcCall &
    wait until vlc has done most stuff
    waitCpuDecrease $!
    start rygel
    rygel

    Запустим его в фоновом режиме:

    sudo ./rygel-vlc.sh &

    И проверим наш DLNA render также через Andriod с помощью: HiFi Cast, Airpincast, Bubbleupnpcast.

    И если вы не готовы экспериментировать с Linux , то в качестве собранных, готовых к работе "из коробки" Raspberry Pi с вышеописанным функционалом мы можем вам предложить наборы ViaMyBox "Музыка флер"!

    Дистрибутив и код вы можете найти здесь.

    https://github.com/viatc/viamybox

    Надеюсь со временем, мы увидим и рассмотрим новые интересные проекты для Raspberry Pi на эту тему!

    Средняя зарплата в IT

    113 000 ₽/мес.
    Средняя зарплата по всем IT-специализациям на основании 10 035 анкет, за 2-ое пол. 2020 года Узнать свою зарплату
    Реклама
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее

    Комментарии 6

      0
      Вы прям как Apple, переизобрели старый усилитель с малинкой ))))
        0

        И какой смысл прикручивать к старому или новому, но качественному усилению столь убогий DAC? Ему хватит столь же убогого современного усилителя/бумбокса…
        Овчинка выделки не стоит..

          0
          ещё один «одинаковый» how-to со своими нюансами — в копилку ))
            0

            Что? Опять? Медиа сервер с малиной? Да сколько можно одно и то же

              0
              Какая версия малинки? DLNA сервер без usb 3.0 портов по моему нет смысла подымать.
                0

                Yeah, well, I'm gonna go build my own theme park, with blackjack and hookers. In fact, forget the park!
                Bender Bending Rodríguez

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

                Самое читаемое