środa, 8 lutego 2017

Raspberry Pi i system multi-room oparty na Logitech Media Server

Niedawno przyszła pocztą kolejna Malinka (pierwszą miałem v1 B+, teraz wskoczyła 3 z promocji na Banggood), mogłem więc w nocy dokończyć kolejny projekt.

Zawsze chciałem mieć dźwięk multi-room. Nigdy jednak nie kupiłem głośników które by go obsługiwały (Denon Heos, Sonos, Samsung M) - między innymi ze względu na cenę - aż tak często nie słucham żeby wydać na nie 6-8k PLN. Wolę wydać na coś innego.

Od momentu kiedy kupiłem pierwszą Malinę, chciałem z niej zrobić coś w stylu małego centrum muzycznego. Volumio, Runeaudio czy Moodeaudio są fajne, piękne, ale nie obsługują multiroom (tutaj chyba się to zmieniło w kontekście Volumio i da się to zrobić).

Założenie projektu było następujące:
- multiroom który obsługuje radia internetowe, moją muzykę, spotify, deezer
- możliwe tanio, ale z możliwością zrobienia Hi-Fi gdzie będę uważał za stosowne

Udało mi się (no, nie był to wielki wyczyn w sumie) postawić Logitech Media Server na Raspberry Pi. Produkt co prawda już oficjalnie nie jest rozwijany przez Logitech (szkoda wielka), ale udostępnili kod, dlatego produkt nie dość, że żyje to jeszcze jest rozwijany.




Lista potrzebnych elementów:
- Raspberry Pi. Działa dobrze i na v1 B+, ale postawiłem go finalnie na nowo zakupionej wersji 3 - większa moc i więcej RAM
- karta muzyczna. Jakość standardowego jacka w Pi3 jest podła, trzeba go więc czymś zastąpić. Zacząłem od czegoś bardzo prostego i taniego - http://allegro.pl/karta-muzyczna-dzwiekowa-na-usb-7-1-hurt-f-vat-i6453599436.html
- głośniki - podpiąłem na szybko głośnik przenośny jaki miałem w domu

Instalacja LMS jest prosta: http://www.gerrelt.nl/RaspberryPi/wordpress/tutorial-stand-alone-squeezebox-server-and-player-for-bbq/, system wstaje sam, poniżej opis komend.

Serwer:
sudo apt-get install -y libsox-fmt-all libflac-dev libfaad2 libmad0
wget -O logitechmediaserver_all.deb $(wget -q -O - "http://www.mysqueezebox.com/update/?version=7.9.0&revision=1&geturl=1&os=deb")
sudo dpkg -i logitechmediaserver_all.deb
sudo chown -R squeezeboxserver:nogroup /usr/share/squeezeboxserver/

Do odtwarzania na tym samym sprzęcie użyłem Squeezelite.

sudo alsamixer - tutaj możemy sprawdzić naszą kartę muzyczną po naciśnięciu F6, wybrać poziom dźwięku, etc.

Instalacja bibliotek:
sudo apt-get install -y libflac-dev libfaad2 libmad0

Katalog tymczasowy i ściągnięcie squeezelite:
mkdir squeezelite
cd squeezelite
wget -O squeezelite-armv6hf.tar.gz http://www.gerrelt.nl/RaspberryPi/squeezelite_ralph/squeezelite-armv6hf.tar.gz
tar -xvzf squeezelite-armv6hf.tar.gz
sudo mv squeezelite squeezelite-armv6hf
sudo mv squeezelite-armv6hf /usr/bin
sudo chmod a+x /usr/bin/squeezelite-armv6hf
sudo /usr/bin/squeezelite-armv6hf -l

Poniżej kilka przykładów wywołania i sprawdzenia czy działa karta muzyczna, którą wybraliśmy.

sudo /usr/bin/squeezelite-armv6hf -o default:CARD=ALSA -s 192.168.1.200

W przypadku karty USB możemy podać:
sudo /usr/bin/squeezelite-armv6hf -o front:CARD=Device,DEV=0 -s 192.168.1.200

Dla HDMI:
sudo /usr/bin/squeezelite-armv6hf -o hw:CARD=ALSA,DEV=1

Teraz konfiguracja uruchomienia squeezelite przy starcie systemu:
cd /home/pi/squeezelite
sudo wget http://www.gerrelt.nl/RaspberryPi/squeezelite_settings.sh
sudo mv squeezelite_settings.sh /usr/local/bin
sudo chmod a+x /usr/local/bin/squeezelite_settings.sh

sudo wget http://www.gerrelt.nl/RaspberryPi/squeezelitehf.sh
sudo mv squeezelitehf.sh /etc/init.d/squeezelite
sudo chmod a+x /etc/init.d/squeezelite

sudo wget http://www.gerrelt.nl/RaspberryPi/squeezelite.service
sudo mv squeezelite.service /etc/systemd/system
sudo systemctl enable squeezelite.service

cd /home/pi

Ważna sprawa. Musimy zmienić w ustawieniach naszą kartę muzyczną na taką, jakiej będziemy używać.

sudo nano /usr/local/bin/squeezelite_settings.sh

Szukamy:
SL_SOUNDCARD="sysdefault:CARD=ALSA"
Zmieniamy na wybraną przez nas
SL_SOUNDCARD="hw:CARD=ALSA,DEV=1"

Można jeszcze zmienić wyświetlaną nazwę:
SL_NAME="Denon"

Co ciekawe, u mnie wysyłanie na HDMI działa tylko w momencie jeżeli przy starcie systemu odbiornik (u mnie amplituner) był włączony. Później chodzi tygodniami, ale przy restarcie musi go widocznie wykryć.

I na koniec
sudo /etc/init.d/squeezelite start

Sprawdzić wszystko możemy wchodząc na adres raspberry z portem 9000, dla przykładu 192.168.1.200:9000

Konieczne będzie założenie konta na http://mysqueezebox.com/ i podanie danych logowania na naszym serwerze.

Teraz clue! Mądrzy ludzie opracowali PiCorePlayer (https://sites.google.com/site/picoreplayer/home), który jest udostępniony w formie image zajmującego kilkadziesiąt megabajtów. Zgrywasz na kartę, wkładasz, działa. Jeżeli chcesz - ustawiasz połączenie po WiFi i voila - standalone player (jeżeli ktoś chce to może go nawet użyć w samochodzie, bo Malinę zasilisz po USB przecież). Można sobie każdą z instalacji nazwać jak chcesz - Łazienka góra, Łazienka dół, Salon, Sypialnia...



Dostęp do playera czy serwera możemy mieć (oprócz strony internetowej) również przez aplikację Squeezer na Android czy też iPhone (na który jest jeszcze iPeng). Można włączać, wyłączać odtwarzacze, grupować je, decydować czy muzyka gra na jednym czy na wszystkich, dla każdego z playerów można ustawić osobny alarm.



Poszło wszystko 'od strzału'. Radio 3, Antyradio, setki (jeśli nie tysiące) innych stacji dostępnych za kliknięciem. Na deezer posłuchałem Death-metalu, z Tune-in Radio stacji EBM, z mojej kolekcji bajek dla dzieci, z listy pluginów LMS pobrałem ważny dla mnie Bandcamp. Aplikacja Spotify też jest, ale tego nie zdążyłem jeszcze sprawdzić. Można dodawać do ulubionych, tworzyć własne listy odtwarzania, itp, itd. Możliwości konfiguracyjne są bardzo duże.

Minimalny koszt to jakieś 80 PLN za Rpi1 B+ (na serwer) + zapewne 70 PLN za Rp1 B + karta muzyczna + głośniki. Powiedzmy, że 200 PLN za możliwość odtwarzania na dwóch sprzętach.

Dalej poszło już z górki:
- zakup dwóch Rpi B na PiCorePlayery - około 160 PLN
- do salonu gdzie mam porządny sprzęt grający - połączenie ze wzmacniaczem Denon po HDMI - instalacja Squeezelite
- do sypialni tania karta muzyczna + głośniki komputerowe (mogą być i zasilane po USB)
- do łazienki i sauny BlitzWolf (http://www.banggood.com/BlitzWolf-BW-AP1-20W-Mini-12V-Hi-Fi-Audio-Stereo-Power-Digital-Car-Amplifier-FM-MP3-p-1053566.html?rmmds=search) + głośniki łazienkowe. Widzę komplety za 60-80 PLN - nie potrzebuję tam Mozarta w HiFi.


Każdemu tutaj oczywiście wedle potrzeb - są i sprzęty DAC (HiFiBerry) za kilkaset złotych które dają świetną jakość dźwięku.

W domoticz jest obsługa Logitech Media Server, w związku z tym:
- jako że nie lubię, gdy sprzęt chodzi i pobiera energię bez potrzeby - każdy player wraz z głośnikiem (jeżeli aktywny) podpięty pod gniazdko 433MHz i zrobione sceny, które: włączą player, ustawią ulubioną stację (oczywiście z możliwością zmiany telefonem), zaczną grać na przykład w łazience o 6:45 gdy wstajemy i idziemy się kąpać a wyłączą o 7:30 gdy wychodzimy z domu
- obsługa pasywnych nie ma sensu pod włącznikiem, bo tutaj Malina pobiera bardzo mało prądu w stanie spoczynku

W Domoticz możemy dodać serwer z poziomu Hardware, gdzie podajemy adres i port. System automatycznie wykryje nasze odtwarzacze.



Jak dla mnie combo Logitech Media Server + piCorePlayer jest fantastycznym systemem dla moich potrzeb.

Życzę miłego słuchania i zapraszam do kontaktu.

18 komentarzy:

  1. Witam mam pytanie czyli rozumiem że do każdej maliny masz podpiętą kartą muzyczną ?

    OdpowiedzUsuń
    Odpowiedzi
    1. A to zależy ;) Z jednej (powiedzmy głównej, tam gdzie postawiłem Logitech Media Server) dźwięk wychodzi po HDMI, tam odtwarza Squeezelite. Ale pozostałe, owszem, każda ma prostą kartę na USB i PiCorePlayer. Nie zależało mi specjalnie na jakości tym razem. Dla testów i sprawdzenia możesz podpiąć głośniki i do gniazda jack.

      Usuń
  2. Witam a czy można tak zrobić by utworzyć wirtualny przycisk po naciśnięciu którego będzie odtwarzało konkretny plik audio mp3?

    OdpowiedzUsuń
  3. Witam a czy można tak zrobić by utworzyć wirtualny przycisk po naciśnięciu którego będzie odtwarzało konkretny plik audio mp3?

    OdpowiedzUsuń
    Odpowiedzi
    1. Aloha! Jestem pewien, że tak, poprzez dodanie ścieżki do mp3 w play-liście. Ja na przykład mam pod przyciskiem zdefiniowane: http://192.168.1.114:9000/status.html?p0=play&p1=playlist&p2=Antyradio&player=192.168.1.116. Playlista o nazwie Antyradio jest zdefiniowana w Logitech Media Server.

      Usuń
  4. Ten komentarz został usunięty przez autora.

    OdpowiedzUsuń
  5. Prawie mi się udało. Serwer startuje i uruchamia się po wpisaniu IP maliny (192.168.0.116:9000), ale co dziwne działa również z 192.168.0.117:9000. A w Squeezer jest automatycznie dodawany jako 192.168.0.117:9090. Już nic nie rozumiem. Na androidzie nie wyszukuje żadnych stacji. Natomiast przez przeglądarkę wyszukuje stacje ale nie odtwarza nic.

    OdpowiedzUsuń
    Odpowiedzi
    1. Przeinstalowanie od początku pomogło, wielkie dzięki za tutorial.

      Usuń
    2. Nawet nie zdążyłem odpisać (coś się stało z system powiadamiania o komentarzach na blogspot i nie dostaję e-maili), ale widzę, że sobie poradziłeś. Co mnie niezmiernie cieszy :) Używam LMS już długo i bardzo sobie go chwalę.

      Usuń
  6. Czy LMS i Domoticz mogą działać na tym samym Raspberry, czy musisz mieć 2 osobne Maliny?
    Rozumiem, że z Domoticzem łączysz tylko serwer LMS. Co w przypadku, gdy playery są wyłączone? (pisałeś o włącznikach na 433MHz) Domoticz pewnie ich nie widzi i żeby uruchomić odtwarzacz, najpierw z poziomu Domoticza trzeba by było włączyć gniazdko (kilkanaście sekund na uruchomienie) i dopiero po tym może być włączony odtwarzacz. Zgadza się?

    OdpowiedzUsuń
  7. Cześć!

    LMS i Domoticz mogą działać na jednym Raspberry, nie ma z tym żadnego problemu. Zresztą - taką na początku miałem konfigurację, ale z powodów typowo wydajnościowych wolałem te dwa serwisy rozdzielić. A dwa - Max2Play bardzo ładnie zarządza serwisami LMS oraz innymi.

    Co do gniazdek - dokładnie jest tak jak piszesz. W tym momencie został mi tylko jeden piCorePlayer skonfigurowany na Raspberry. Gdy chcę go włączyć, to:
    - włączam gniazdko (433Mhz, ale chcę się ich w najbliższym czasie pozbyć)
    - czekam kilkanaście sekund aż piCorePlayer pojawi się dostępny
    - włączam muzykę i słucham

    Jednak to gniazdko jest na tyle rzadko włączane i wiem, że zostanę w tym miejscu dłużej (dla ścisłości, muzyka w saunie), że mogę te kilka sekund poczekać. W przypadku, powiedzmy, kuchni - Raspberry powinno być cały czas włączone.

    OdpowiedzUsuń
  8. Cześć, masz pomysł jak rozwiązać stream muzyki w drugą stronę? Mam pomysł na umieszczenie np. w łazience Rpi z głośnikami, oraz Rpi z glośnikami przy TV i amplitunerze Denon (Rpi przed HDMI do Denon). Rozumiem, że mogę puścić streama z serwera Rpi na oba Rpi wtedy będzie grało w łazience i na Denon. a W 2 stronę? Jak stream będzie z TV na Denon i chciałbym to puścić do głośników w łazience? Z góry dzięki za wskazówki!

    pozdrawiam,
    Kamil

    OdpowiedzUsuń
    Odpowiedzi
    1. Mniej więcej rozumiem, ale co chcesz streamować z TV? Przesłanie dźwięku z Denona do Raspberry to raczej się nie uda, przynajmniej jakoś nie mogę w głowie znaleźć takiego rozwiązania. Raspberry z tego co wiem nie obsługuje ARC.

      Usuń
    2. Chcę mieć opcję np. puszczenia YT na TV (dźwięk na Denon) i puszczenie tego dźwięku na głośniku w łazience.

      Usuń
    3. Raczej się nie uda...

      Usuń
  9. Hej,

    MOżecie podpowiedzieć jak najsensowniej stworzyć radio w łazience?
    Cezar piszesz o konfiguracji: " do łazienki i sauny BlitzWolf (http://www.banggood.com/BlitzWolf-BW-AP1-20W-Mini-12V-Hi-Fi-Audio-Stereo-Power-Digital-Car-Amplifier-FM-MP3-p-1053566.html?rmmds=search) + głośniki łazienkowe. Widzę komplety za 60-80 PLN - nie potrzebuję tam Mozarta w HiFi" - jak łączysz wzmacniacz z raspberry, wzmacniacz masz gdzieś ukryty?

    PZDR


    OdpowiedzUsuń
    Odpowiedzi
    1. Cześć. Dorzuciłem zdjęcie do posta. U mnie wzmacniacz leży na saunie, głośniki były również w niej montowane.

      Usuń