DIY Multiroom hangrendszer - Raspberryvel

Akár azt is gondolhatná az ember, ha beüzemel minden szobába egy Raspberry Pi-t, köt rá hangszórót, és elindítja rajta ugyanazt a webrádiót, akkor mindenhol ugyanazt fogja hallani. Végülis igen, ugyanazt fogja hallani, de közel sem biztos, hogy ugyanakkor. A hálózati forgalomszabályozás, sebességingadozás miatt ugyanis lesz ahol előrébb, lesz ahol hátrébb tart majd az éppen szóló szám lejátszása.
Ennek feloldására alkalmasak a Multiroom hangrendszerek.

Vehetünk persze kifejezetten erre szolgáló, szépen muzsikáló célhardvereket, melyeket egyszerű beállítani.. node mi abban a pláne? :)
Szokás szerint Do-It-Yourself irányból közelítem meg a problémát. Tegyük fel, hogy van egy Master eszköz, ami a többi eszköz számára továbbítja a hanganyagot WiFi-n keresztül, a kliensek pedig az abba ágyazott időkódok segítségével szinkronban lejátsszák egyidőben, minden helyiségben. Ennyit az alapelvről röviden.

multiroom-rendszer.jpg

A technikai megvalósítás útjának a Raspberry Pi-t választottam. Zero W-k vannak itthon tömegével, így ezzel kísérleteztem. Azt azért el kell mondjam, hogy a Zero teljesítménye nem túl izmos, így Master eszköznek valami erősebbet javasolnék, pl egy Raspberry PI 3 vagy 4-et. Kliensoldalon viszont elegendő egy kisebb teljesítményű is bőségesen. Természetesen, ha a WiFi nem szimpatikus számunkra, és van lehetőség kábelezni, az UTP-n stabilabb a kommunikáció, a (nagyobb) Raspberry-ken általában van LAN, ha meg nincs, akkor is fel lehet vértezni USB-LAN adapterrel, így kiküszöbölve az esetleges vezeték nélküli zavarokat. Hangkeltésre használható a Raspberry integrált hangkártyája (bár ennek minőségére sokan panaszkodnak), ha nincs - mert pl a Zero-kon nincs - akkor USB-s hangkártya is, tetszőleges hangfallal. "Vájtfülűek" számára jobb hangminőséget produkáló bővítőlapok (HAT) is elérhetőek, ilyen pl a HifiBerry.

multiroom.jpg

A Master eszközre telepítjük az MPD démont, (mások a Mopidy-re esküsznek) ami a hanganyag kezelését biztosítja, továbbá a snapserver -t, ami a hanganyagot továbbítja a hálózaton található snapclient kliensek számára. A Master-re is telepíthetjük a snapclient-et persze, ha erre igényünk van, de nem szükségszerű. A kliensekre csak a snapclient kell, és persze egy működő hangrendszer.

MPD alias Music Player Daemon

Ez a program gondoskodik a zenék továbbításáról a snapserver felé.
Telepítése Debian/Ubuntu/Raspbian rendszerre rendkívül egyszerű:

sudo apt install mpd

Nyissuk meg az mpd konfigurációs állományát egy szövegszerkesztővel:

sudo nano /etc/mpd.conf

Én speciel egy pendrive-ra másolt médiákat játszok le vele (a pendrive becsatolása már Linux alapismeret), ezt az alábbi szekcióban lehet módosítani:

music_directory "/mnt/pendrive/media"
playlist_directory "/mnt/pendrive/media"

Az MPD hangkimenetét egy szoftveres csőbe kell átirányítani, valahogy így: 

audio_output {
type "fifo"
name "Snapcast"
path "/tmp/snapfifo"
format "48000:16:2"
enabled "yes"
mixer_type "software"
}

Készítsük el az adatfolyamot biztosító fájlt:

touch /tmp/snapfifo

Az MPD használatához létezik többféle frontend, van Androidos:

van böngészőből használható:

  • ympd - MPD Web GUI
  • CYP - Control Your Player

Ha esetleg rádiót szeretnénk hallgatni, erre szolgál az:

A böngészőből használhatót telepíthetjük a szerverre, ez aránylag univerzális megoldás. A CYP praktikus, tartalmaz Youtube integrációt is... de sajna a youtube-dl napokban történt RIAA általi ellehetetlenítése és a Youtube API módosulása miatt ez nem működik. (nemcsak ebben a projektben, hanem minden youtube-dl alapú program így járt)
Így inkább az ympd-t használom egyelőre. Raspbianra ennek is elérhetővé tették a binárisát

wget https://www.ympd.org/downloads/ympd-1.2.3-armhf.tar.bz2
tar -xvf ympd-1.2.3-armhf.tar.bz2
sudo ./ympd --webport 8083

Az utolsó parancs elindítja a programot és a 8083-as porton elérhető is, ha az MPD közben már elindult, akkor csatlakozik is hozzá. Ennek automatikus indítását szabadon választható módon kell megvalósítani. ;)

ympd.jpg

Tipp: az Update DB gomb megnyomása első indításkor sokat segít, ha nem látjuk a zenéinket. ;)

Snapcast alias Synchronous audio player (snapserver & snapclient)

Térjünk át a következő lépésre, a szinkronlejátszó telepítésére. Telepítése új Ubuntu esetében szintén megy csomagkezelővel, a szerver részét így:

sudo apt install snapserver

A kliens részt pedig így:

sudo apt install snapclient

Sajnos Raspbianon ez nem feltétlenül van így, de a snapcast projekt honlapjáról letölthetőek a Raspberry-hez való bináris csomagok is, meg persze igény szerint a forráskód.

https://github.com/badaix/snapcast/releases/

A szerver telepítése tehát ez esetben így néz ki:

wget https://github.com/badaix/snapcast/releases/download/v0.22.0/snapserver_0.22.0-1_armhf.deb
sudo dpkg -i snapserver_0.22.0-1_armhf.deb
sudo apt-get -f install

A szerver beállítás az /etc/snapserver.conf -ban található, itt az adatfolyam nevét és paramétereit módosíthatják, olyan módon, hogy passzoljon az mpd beállításaihoz:

[stream]
stream = pipe:///tmp/snapfifo?name=default&sampleformat=48000:16:2&mode=create

Engedélyezzük a snapserver automatikus indulását és indítsuk is el:

sudo systemctl start snapserver
sudo systemctl enable snapserver

Szükség szerint indítsuk újra az mpd-t:

sudo service mpd restart

A kliensekre a telepítés pedig így néz ki:

wget https://github.com/badaix/snapcast/releases/download/v0.22.0/snapclient_0.22.0-1_armhf.deb
sudo dpkg -i snapclient_0.22.0-1_armhf.deb
sudo apt-get -f install

Ha a telepítés végén biztosra akarunk menni, állítsuk be a snapclient automatikus indítását és indítsuk is el:

sudo systemctl start snapclient
sudo systemctl enable snapclient

Különösebben nagy beállításai nincsenek a kliensnek, ha van működőképes ALSA rendszer a gépen és működő hangkártya, akkor lesz hang. A szervert pedig automatikusan megtalálja helyi hálózatban.

Ha mindent jól csináltunk akkor a felcsatlakozott snapclient-eken keresztül hallhatjuk a központi gép ympd-n elindított zenét. A snapclient-ek hangerejét külön-külön a Snapcast nevű Android alkalmazással állíthatjuk példának okáért.

Ha valamiért mindezt bonyolultnak látnánk, és nem szeretnénk másra használni a Raspberry-nket, akkor töltsünk el egy RuneAudio képfájlt, töltsük fel egy microSD kártyára és állítsuk be webes felületen. Nincs is ennél egyszerűbb. Egyébként a RuneAudio belsejében is ugyanúgy MPD és Snapcast ketyeg, csak előtelepítve és saját webes felületen összehangolva. Én szeretnék más szolgáltatásokat is használni az RPI szerveremen, így inkább kézzel telepítettem ezeket, úgy ahogy én szeretném használni, de ízlések és pofonok. (Igen nem szégyellem az egyébként mozgásérzékelőként és hőmérőként használt RPI-ket egyúttal snapclient hangszóróként használni, és a Snapserver mellett bőven megfér egy Domoticz)

 

A bejegyzés trackback címe:

https://bitekmindenhol.blog.hu/api/trackback/id/tr3115741042

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

vampywiz17 2020.10.29. 15:51:07

Jo cikk, koszi!

HifiBerry tenyleg jo cucc, az altalad linkelt mellett van olyan verzioja is, amin van
S/PDIF kimenet (elv bit-perfect), vagy olyan, ami eleg jo minosegu DAC-ot tartalmaz. Szoval akar igazan jo minosegu multi-room rendszert is ki lehet ebbol epiteni.

Támogatók:
okosotthon.jpg
allterco.jpg

Utolsó kommentek

  • szenorb: Hello. Bekötöttem 12V-ra , a bemetére egy mozgás érzékelőt kötöttem. Szépen kapcsol a relé a késle... (2023.06.14. 06:48) Shelly okosrelé (Shelly1)
  • Melanoheliophobia: Üdv! Kb. 2 éve vásároltam két ugyanilyen okos izzót. Sajnos az egyik még garancia idő alatt eltávo... (2023.05.03. 16:50) Shelly Vintage okosizzó
  • eNeS: Lehetséges, bár az ESP8266-ot lassan ideje elfelejteni, ha nem helyi hálózatra akarsz vele forgalm... (2023.04.02. 08:43) Tasmota szkriptek
  • eNeS: @tomih: Thonnyban rebootot nyomva nekem se megy az NTP. De mikor lekapcsoltam a Thonnyt és rebooto... (2023.04.02. 08:40) Raspberry Pico és a LAN (W5100S-EVB-Pico)
  • krump_lee: Kedves eNeS! ESP8266 tasmota-val szenvedek, hiemq kapcsolat sehogy nem jön össze, sehol nem talál... (2023.04.02. 08:31) Tasmota szkriptek
  • Utolsó 20

Címkék

433mhz (12) alkatrész (22) alternatív kapcsoló (2) amg8833 (1) analóg (2) android (1) arduinoeasy (5) audio (1) automatizálás (3) bemenet (3) bk7231n (1) ble (1) blitzwolf (4) bluetooth (9) bridge (2) camhi (2) csináld magad (22) dimmer (1) diy (28) do-it-yourself (27) domoticz (11) ds18b20 (1) ebay (3) érintő (2) érintőkapcsoló (7) érzékelő (11) esp-01 (2) esp32 (11) esp8266 (21) espeasy (2) espurna (1) esp projekt (18) Eview7 (1) ewelink (1) feldolgozó (1) felhő (1) fényérzékelő (1) firmware (7) flame detector (1) fogyasztásmérő (5) ftdi (1) füstérzékelő (1) gázérzékelő (1) gpio (1) hang (4) hangjelző (1) hőmérséklet (22) https (1) ikea (1) impulzus relé (1) izzó (2) javascript (1) jelenlétérzékelő (3) kamera (18) keresztkapcsoló (1) kézmozdulat (1) kijelző (3) kimenet (21) konnektor (8) lan (9) lángérzékelő (2) led (3) linux (4) logic level converter (1) lua (1) lux (1) maple mini (2) mcu (3) micropython (1) mikrovezérlő (2) milkv (1) mobil (1) mosfet (1) mozgás (5) mpyeasy (4) mq-2 (2) mqtt (3) működtető rendszer (5) multiroom (1) nedvesség (1) neo (1) neopixel (1) Node-RED (1) nvr (4) nyitás (7) okosház (4) okosizzó (3) okosotthon (8) oled (1) onvif (8) openbeken (1) opencv (1) openwrt (4) orange pi (4) páratartalom (6) php (1) pico (1) pi pico (2) poe (1) programozás (9) projekt (25) proximity olvasó (1) python (2) raspberry (14) raspberry projekt (6) raspbian (1) reed (1) relé (27) rf (2) rgb (6) rock pi (1) rögzítő (2) rp2 (1) rpieasy (1) rtc (1) shelly (24) smartwise (1) solid state relay (1) sonoff (20) SonOTA (1) soros (1) ssl (1) ssr (1) stm32 (4) szenzor (11) szilárdtest relé (1) szintillesztő (2) sziréna (1) szkript (3) szünetmentesítés (4) t1 (1) tasmota (8) távirányító (3) Telegram (1) termékteszt (85) termosztát (2) touch (2) ups (5) usb (7) usb hub (1) valós idejű óra (1) vezérlések (20) vezérlő (5) világítás (5) villanykapcsoló (12) webkamera (1) wiegand (1) wifi (32) ws2812 (1) xiaomi (5) xm (4) xmeye (4) yoosee (1) zigbee (16) zwave (3) Címkefelhő
süti beállítások módosítása