Chciałem słuchać muzyki z adapteru i gramofonu na normalnych, pasywnych głośnikach. Sam adapter miał własne niewielkie głośniki, ale ich jakość oraz głośność były dalekie od tego, czego oczekiwałem.
Miałem już Raspberry Pi z systemem Volumio, nakładkę HiFiBerry Amp2 oraz parę pasywnych głośników. Początkowo wydawało się więc, że wystarczy podłączyć adapter do Raspberry Pi, a następnie skierować dźwięk do HiFiBerry.
Problem polegał na tym, że HiFiBerry Amp2 jest wyłącznie urządzeniem wyjściowym. Odbiera cyfrowy dźwięk z Raspberry Pi, wzmacnia go i wysyła do głośników, ale nie ma analogowego wejścia RCA, do którego można bezpośrednio podłączyć adapter lub gramofon.
Rozwiązaniem okazał się zewnętrzny interfejs audio USB Behringer UCA202.
Finalnie powstał zestaw, który może działać w dwóch trybach: jako streamer Volumio oraz jako cyfrowy most pomiędzy adapterem, gramofonem i pasywnymi głośnikami.
Co chciałem osiągnąć?
Docelowy system miał umożliwiać:
- słuchanie muzyki z gramofonu na pasywnych głośnikach,
- wykorzystanie HiFiBerry Amp2 jako wzmacniacza,
- zachowanie Volumio jako odtwarzacza radia internetowego, Spotify i AirPlay,
- przełączanie źródła bez każdorazowego logowania przez SSH,
- sterowanie całością z prostego panelu WWW.
Architektura rozwiązania
Finalny tor sygnału wygląda następująco:
Adapter / gramofon
wyjście LINE OUT RCA
│
▼
Behringer UCA202
wejście INPUT L/R
│
│ USB
▼
Raspberry Pi z Volumio
│
│ I2S
▼
HiFiBerry Amp / Amp2
│
│ przewody głośnikowe
▼
Pasywne głośniki
Raspberry Pi pełni tutaj rolę cyfrowego routera audio.
Analogowy sygnał z adapteru trafia do Behringera UCA202. Interfejs zamienia go na cyfrowe audio przesyłane przez USB. Raspberry Pi odbiera strumień za pomocą ALSA, a następnie wysyła go do HiFiBerry. HiFiBerry wzmacnia sygnał i napędza pasywne głośniki.
Najważniejszy jest podział odpowiedzialności pomiędzy urządzeniami:
- Behringer UCA202 pełni rolę wejścia audio,
- Raspberry Pi przekazuje i kontroluje strumień,
- HiFiBerry Amp2 jest wyjściem audio i wzmacniaczem.
Zaciski głośnikowe HiFiBerry nie są wejściem audio. Nie wolno podłączać do nich wyjścia RCA adapteru ani gramofonu.
Potrzebny sprzęt
| Element | Rola |
|---|---|
| Adapter lub gramofon z LINE OUT | Analogowe źródło dźwięku |
| Behringer UCA202 | Konwersja analogowego sygnału RCA na cyfrowe audio USB |
| Raspberry Pi | Uruchomienie Volumio, ALSA, usług systemowych i panelu sterującego |
| HiFiBerry Amp lub Amp2 | Wyjście audio oraz wzmacniacz dla głośników pasywnych |
| Pasywne głośniki | Docelowe odtwarzanie dźwięku |
| Kabel 2 × RCA | Połączenie wyjścia LINE OUT adapteru z wejściem Behringera |
| Przewody głośnikowe | Połączenie HiFiBerry z lewym i prawym głośnikiem |
Podłączenie sprzętu
Adapter lub gramofon do Behringera
Wyjście LINE OUT urządzenia podłączamy do wejść Behringera UCA202:
- biały RCA do kanału lewego L,
- czerwony RCA do kanału prawego R,
- przewody muszą trafić do złączy oznaczonych jako INPUT.
Następnie Behringera podłączamy przewodem USB do Raspberry Pi.
HiFiBerry do głośników
Pasywne głośniki podłączamy przewodami głośnikowymi bezpośrednio do zacisków HiFiBerry. Należy zachować poprawne przypisanie kanałów oraz polaryzację przewodów.
Przed pierwszym testem warto ustawić niski poziom głośności, a dopiero później stopniowo go zwiększać.
Konfiguracja Volumio i HiFiBerry
Po uruchomieniu Raspberry Pi panel Volumio powinien być dostępny pod adresem:
http://volumio.local
Jeżeli nazwa lokalna nie działa, należy użyć adresu IP Raspberry Pi:
http://192.z.y.z
Ten sam adres wykorzystujemy do połączenia SSH:
ssh volumio@192.z.y.z
Jeżeli SSH jest wyłączone, można je aktywować na stronie developerskiej:
http://ADRES_IP_VOLUMIO/dev
W panelu Volumio przechodzimy do:
Settings → Playback Options
Następnie ustawiamy:
- I2S DAC: ON,
- DAC Model: HiFiBerry Amp/Amp2 lub zgodny model,
- Mixer Type: Hardware, jeżeli jest dostępny,
- niski początkowy poziom głośności.
Po zapisaniu ustawień restartujemy system.
Sprawdzenie urządzeń ALSA
Przed uruchomieniem przekazywania dźwięku trzeba sprawdzić, czy system widzi wejście Behringera i wyjście HiFiBerry.
Urządzenia nagrywające wyświetlamy poleceniem:
arecord -l
Urządzenia odtwarzające:
aplay -l
W opisywanej konfiguracji urządzenia zostały wykryte jako:
Behringer UCA202:
card 5, device 0
plughw:5,0
HiFiBerry:
card 2, device 0
plughw:2,0
Składnia plughw:<card>,<device> określa numer karty i urządzenia ALSA.
Numery kart mogą zmienić się po restarcie systemu albo przepięciu urządzenia USB. Przed modyfikacją konfiguracji zawsze warto ponownie wykonać
arecord -liaplay -l.
Test HiFiBerry i głośników
Najpierw sprawdzamy sam tor wyjściowy:
amixer -c 2 sset 'Digital' 90% unmute
volumio volume 80
speaker-test -D plughw:2,0 -c 2 -t sine -f 440
Jeżeli z głośników słychać sygnał testowy, oznacza to, że:
- HiFiBerry zostało poprawnie wykryte,
- wzmacniacz działa,
- głośniki są właściwie podłączone,
- możemy przejść do testowania wejścia Behringera.
Test nagrania z adapteru lub gramofonu
Nagrywamy dziesięciosekundową próbkę:
arecord \
-D plughw:5,0 \
-f S16_LE \
-r 44100 \
-c 2 \
-V stereo \
-d 10 \
/tmp/adapter.wav
Następnie odtwarzamy ją przez HiFiBerry:
aplay -D plughw:2,0 /tmp/adapter.wav
Parametr -V stereo pokazuje poziom odbieranego sygnału. Jeżeli wskaźnik reaguje podczas odtwarzania muzyki, Behringer poprawnie odbiera dźwięk.
W przypadku UCA202 program alsamixer może wyświetlić komunikat:
This sound device does not have any capture controls
Jest to normalne. Komunikat oznacza jedynie, że urządzenie nie udostępnia programowego suwaka poziomu wejścia.
Odsłuch na żywo
Po potwierdzeniu działania wejścia i wyjścia łączymy oba urządzenia prostym potokiem:
arecord \
-D plughw:5,0 \
-f S16_LE \
-r 44100 \
-c 2 \
--buffer-time=500000 \
| aplay \
-D plughw:2,0 \
-f S16_LE \
-r 44100 \
-c 2 \
--buffer-time=500000
arecord odbiera dźwięk z Behringera, a aplay przekazuje go do HiFiBerry.
W tym momencie muzyka z adapteru powinna być słyszalna na pasywnych głośnikach.
Usługa systemd dla wejścia audio
Ręczna komenda działa tylko do chwili zamknięcia terminala. Dlatego tworzymy usługę systemową:
sudo nano /etc/systemd/system/turntable.service
Zawartość pliku:
[Unit]
Description=Turntable line-in from Behringer UCA202 to HiFiBerry
After=sound.target
Wants=sound.target
[Service]
Type=simple
User=volumio
Group=audio
ExecStart=/bin/bash -c 'arecord -D plughw:5,0 -f S16_LE -r 44100 -c 2 --buffer-time=500000 | aplay -D plughw:2,0 -f S16_LE -r 44100 -c 2 --buffer-time=500000'
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
Przeładowujemy konfigurację:
sudo systemctl daemon-reload
Usługę uruchamiamy poleceniem:
sudo systemctl start turntable.service
Status sprawdzamy przez:
sudo systemctl status turntable.service
Konflikt pomiędzy adapterem a Volumio
Podczas działania potoku arecord | aplay proces aplay zajmuje urządzenie HiFiBerry.
Volumio próbuje korzystać z tej samej karty dźwiękowej. Może więc pojawić się błąd:
device busy
Dlatego zestaw działa w dwóch rozłącznych trybach:
| Tryb | Aktywne źródło | Zatrzymane procesy |
|---|---|---|
| Adapter ON | Behringer → Raspberry Pi → HiFiBerry | Volumio i MPD |
| Volumio ON | Radio, Spotify lub AirPlay | turntable.service, arecord i aplay |
Usługa wejścia audio nie powinna uruchamiać się automatycznie przy starcie:
sudo systemctl disable turntable.service
Skrypt uruchamiający adapter
sudo nano /usr/local/bin/gramofon-on
#!/bin/bash
volumio stop 2>/dev/null || true
systemctl stop mpd 2>/dev/null || true
systemctl stop turntable.service 2>/dev/null || true
pkill arecord 2>/dev/null || true
pkill aplay 2>/dev/null || true
amixer -c 2 sset 'Digital' 90% unmute 2>/dev/null || true
volumio volume 80 2>/dev/null || true
systemctl start turntable.service
exit 0
Skrypt przywracający Volumio
sudo nano /usr/local/bin/gramofon-off
#!/bin/bash
systemctl stop turntable.service 2>/dev/null || true
pkill arecord 2>/dev/null || true
pkill aplay 2>/dev/null || true
sleep 1
systemctl restart mpd 2>/dev/null || true
sleep 2
volumio vrestart 2>/dev/null \
|| systemctl restart volumio.service 2>/dev/null \
|| true
sleep 5
volumio volume 80 2>/dev/null || true
exit 0
Skrypt sprawdzający status
sudo nano /usr/local/bin/gramofon-status
#!/bin/bash
echo "=== turntable.service ==="
systemctl status turntable.service --no-pager -l || true
echo ""
echo "=== arecord / aplay ==="
ps -ef | egrep 'arecord|aplay' | grep -v grep || true
echo ""
echo "=== audio users ==="
fuser -v /dev/snd/* 2>/dev/null || true
exit 0
Ustawiamy prawa:
sudo chown root:root \
/usr/local/bin/gramofon-on \
/usr/local/bin/gramofon-off \
/usr/local/bin/gramofon-status
sudo chmod 755 \
/usr/local/bin/gramofon-on \
/usr/local/bin/gramofon-off \
/usr/local/bin/gramofon-status
Panel WWW do przełączania trybów
Logowanie przez SSH za każdym razem byłoby niewygodne. Dlatego powstał prosty panel WWW działający na porcie 8090.
Panel udostępnia trzy akcje:
- Gramofon ON – uruchamia wejście z Behringera,
- Gramofon OFF / Volumio ON – przywraca streaming,
- Status – pokazuje procesy korzystające z urządzeń audio.
Panel jest dostępny pod adresem:
http://ADRES_IP_VOLUMIO:8090
Przykładowo:
http://192.168.1.250:8090
Panel powinien być dostępny wyłącznie w sieci domowej. Portu 8090 nie należy wystawiać bezpośrednio do internetu.
Minimalne uprawnienia sudo
Panel działa jako użytkownik volumio, ale skrypty sterujące usługami wymagają uprawnień administratora.
Zamiast uruchamiać cały serwer Node.js jako root, nadajemy użytkownikowi możliwość wykonywania tylko konkretnych skryptów.
sudo visudo -f /etc/sudoers.d/zz_turntable_web
Dodajemy:
Cmnd_Alias TURNTABLE_CMDS = /usr/local/bin/gramofon-on, /usr/local/bin/gramofon-off, /usr/local/bin/gramofon-status
volumio ALL=(root) NOPASSWD: TURNTABLE_CMDS
Następnie:
sudo chown root:root /etc/sudoers.d/zz_turntable_web
sudo chmod 440 /etc/sudoers.d/zz_turntable_web
sudo visudo -c
Reguły testujemy poleceniami:
sudo -k
sudo -n /usr/local/bin/gramofon-status
sudo -k
sudo -n /usr/local/bin/gramofon-on
sudo -k
sudo -n /usr/local/bin/gramofon-off
Najczęstsze problemy
Volumio nie działa przez volumio.local
Należy użyć adresu IP:
ssh volumio@192.168.1.250
http://192.168.1.250
http://192.168.1.250:8090
Brak capture controls w Behringerze
W przypadku UCA202 jest to normalne. Wejście testujemy przez arecord, a nie suwaki w alsamixer.
Volumio nie gra po wyłączeniu adapteru
sudo systemctl stop turntable.service
sudo pkill arecord 2>/dev/null
sudo pkill aplay 2>/dev/null
sudo systemctl restart mpd 2>/dev/null
volumio vrestart 2>/dev/null \
|| sudo systemctl restart volumio.service
Dźwięk z adapteru jest bardzo cichy
Należy sprawdzić:
- czy używane jest wyjście LINE OUT,
- czy RCA są podłączone do wejścia INPUT Behringera,
- czy poziom wejścia reaguje w
arecord -V stereo, - czy HiFiBerry poprawnie odtwarza sygnał testowy,
- czy regulator głośności adapteru wpływa na LINE OUT.
Procesy arecord lub aplay nadal działają
ps -ef | egrep 'arecord|aplay' | grep -v grep
sudo fuser -v /dev/snd/*
sudo pkill arecord 2>/dev/null
sudo pkill aplay 2>/dev/null
Czego nauczył mnie ten projekt?
Samo przekazanie dźwięku z Behringera do HiFiBerry można uruchomić jedną komendą. To jednak nie wystarczy, jeżeli zestaw ma być wygodny w codziennym użyciu.
Trzeba dodatkowo rozwiązać kilka typowo systemowych problemów:
- wykrywanie urządzeń audio,
- zarządzanie dostępem do współdzielonej karty dźwiękowej,
- kontrolowanie procesów,
- automatyzację za pomocą systemd,
- ograniczenie uprawnień administratora,
- udostępnienie prostego interfejsu użytkownika.
Mały domowy projekt audio okazał się więc dobrym przykładem integracji sprzętu, Linuksa, usług systemowych oraz prostej aplikacji webowej.
Podsumowanie
Finalnie powstał system pozwalający korzystać z tych samych pasywnych głośników zarówno podczas słuchania muzyki z adapteru lub gramofonu, jak i podczas streamowania przez Volumio.
Tor dla źródła analogowego wygląda następująco:
Adapter lub gramofon
→ Behringer UCA202
→ Raspberry Pi
→ HiFiBerry Amp2
→ pasywne głośniki
Volumio pozostaje natomiast źródłem radia internetowego, Spotify oraz AirPlay.
Przełączanie pomiędzy źródłami odbywa się z prostego panelu WWW, bez ręcznego logowania przez SSH.
Najważniejsza rekomendacja: w autostarcie powinien działać tylko panel WWW. Usługę przekazującą dźwięk z adapteru uruchamiamy dopiero w momencie wybrania trybu gramofonu.

Brak komentarzy:
Prześlij komentarz