Optymalizacja MPD.

Jakiś czas temu znalazłem coś, co uważam za ostateczne rozwiązanie dla muzyki pod Linuksem. Ale, po pewnym czasie używania, stwierdziłem, że coś to MPD za duży apetyt ma na procesor. Przypomniał mi o tym sirmacik przy problemach z „charczącym” dźwiękiem, których powodem była różna częstotliwość muzyki i karty. Konkretnie – odtwarzanie Radio Baobab owocowało zużyciem procesora ok. 8-12% wg top (strumień ogg). Niby żaden dramat, bo laptop demonem szybkości nie jest, ale szybki test na mplayerze pokazał, że jemu wystarcza 3-5%.

Oczywiście mplayer to inna bajka – ma wykrywanie procesora podczas uruchomienia, a MPD takich wodotrysków niestety nie ma (strumienia PR 3, czyli Trójki też nie umie odtworzyć, niestety Trójka działa w MPD, wymagany odpowiedni format źródła i odpowiednia wersja MPD – w 0.15.12-1.1 nie działało, mimo zmiany formatu, w 0.15.15-2 z Debiana unstable działa). Zaczął się więc debug. Po pierwsze, trafiłem (nie po raz pierwszy) na świetną stronę opisującą tuning MPD. Po wypróbowaniu wszystkich praktycznie wszystkich sposobów na wyłączenie resamplingu, po braku jakichkolwiek efektów, byłem gotów na przekompilowanie MPD i bibliotek z włączeniem optymalizacji na PIII (bo karta – tania karta USB – uparcie działała w 48 kHz), ale…

Drugiego dnia dobrzy ludzie na IRCu zwrócili moją uwagę na niepozorny i zdecydowanie niewyeksponowany w owym czasie (czytaj: słowa o nim nie było) na wspomnianej stronie parametr samplerate_converter. Okazało się, że jest obecny i opisany w konfigu (cóż, tam nie szukałem, skoro jest dedykowana strona o tuningu). Okazało się, że po dodaniu w konfigu linii:

samplerate_converter            "internal"

MPD zużywa dokładnie tyle procesora, co mplayer – 3-5%. Różnica w jakości jest słyszalna, ale jeśli ktoś słucha głównie radia internetowego, na słabym sprzęcie audio i nie na słuchawkach to spokojnie i bezboleśnie daje się słuchać. Jeśli ktoś ma słaby sprzęt lub nie ma koprocesora, to wręcz nie ma wyboru. 😉

PS. Oczywiście dopisałem stosowny fragment na ww. wiki, w sumie wypada od tego zacząć, żeby sprawdzić, czy o resampling chodzi… Nawiasem, jeśli jest problem z dźwiękiem pod Linuksem, szczególnie w mpd czy mplayerze – przerywa, harczy, tnie, to prawdopodobnie też kwestia ustawień resamplingu. Ww. strona na wiki podaje przyczynę i sposoby rozwiązania.

Ostateczne rozwiązanie dla muzyki pod Linuksem.

W niedawnym wpisie szukałem czegoś, co potrafiłoby scrobble’ować do libre.fm i umiało odtwarzać radio internetowe i Jamendo. Jak to napisałem:

Ideałem byłoby coś, co potrafi scrobble’ować i radia internetowe, i dobrze obsługującego zwykłe albumy z dysku, i Jamendo. W sumie kolejność Jamendo -> radia -> albumy z dysku, bo jakoś nie jestem fanem trzymania wybranej kolekcji (co innego odtwarzacz).

Okazuje się, że się da (generalnie), co więcej, jest to bardzo proste, eleganckie i wydajne. Wykorzystać trzeba MPD (odtwarzanie), GMPC (sterowanie) oraz mpdscribble (scrobble’owanie; wspiera libre.fm, jamendo i last.fm jednocześnie). W Debianie (testing AKA Squeeze) wystarczy:

wajig install gmpc mpd gmpc-plugins mpdscribble

I zmiany w plikach konfiguracyjnych. Nieco bardziej użytkownikocentryczne i wymagające więcej pracy podejście jest opisane w tym wpisie, bardzo ładnie opisującym konfigurację mpd i mpdscribble, na który na szczęście szybko (w sumie od razu) trafiłem. Ja robiłem bardziej po debianowemu, z wykorzystaniem istniejących plików konfiguracyjnych, a nie per użytkownik. Zaleta taka, że prościej, mpd i mpdscribble wstają przy starcie systemu, od kopa, a z komputera i tak tylko ja korzystam.

Nie działa mi tylko – póki co – obsługa Jamendo (znaczy samej playlisty, scrobblera nie sprawdzałem, ale pewnie działa, bo to inny pakiet). Wygląda na jakiś błąd w pluginie do GMPC – zamiast utworów w playliście lądują fragmenty URLi. Ale wiem, że się da (tzn. pod Ubuntu działa).

Z dużych zalet – wygląda, że poprawnie scrobble’uje radio (przynajmniej opisane kiedyś Radio Baobab). No i jest leciutkie (jakieś 10% procesora dla radia), zwłaszcza w porównaniu z playerami webowymi libre.fm czy Jamendo. Jak dla mnie – miodzio. 🙂

Różności: Radio Baobab, OpenWrt.

Jakiś czas temu Wawrzek napisał u siebie o Radio Baobab i się zachwycałem tą stacją. Niestety, po około półtora miesiąca wychodzą na jaw wady – contentu nie jest aż tak dużo, przez co stosunkowo często trafiamy na te same audycje, utwory, w dodatku w dużych setach. Druga wada, to stosunkowo częste zrywanie transmisji. Zależy od dnia, bo są takie, że godzinami działa OK, a czasem co kilka minut zrywa (też tak macie?). Kto jest winny (czy serwer nadający Baobaba, czy nie ISP lub jakiś styk w sieci) – jeszcze nie prowadziłem śledztwa. Ale nadal jak działa to czasem miło włączyć, bo ciekawe kawałki się zdarzają. No i całkiem inaczej, niż w innych stacjach.

Ostatnio służbowo musiałem pobawić się OpenWrt (na co miałem sporą chrapkę od dawna, ale jakoś na własnym routerku nie było czasu i warunków na eksperymenty). Padło na Kamikadze 8.09.1 z kernelem 2.4 (z różnych względów). Fajny jest i bardzo prosty, choć dokumentacja IMO niewystarczająca i może ludzi bez doświadczenia odstraszać. Wersja po kabelku chodzi od kopa, wifi nie testowałem, ale z opisów wynika, że da się bez problemu.

Jeśli komuś nie podoba się domyślne GUI, to polecam zapoznanie się z projektem x-wrt, czyli dużo ładniejszą i bardziej funkcjonalną nakładką graficzną na OpenWrt. Chociaż esencją i tak pozostaje konsola. Na razie w domu nie mam – muszę doczytać o Tor na OpenWrt, coś mi się obiło przy szybkim researchu, że są błędy jakieś i nienajnowsza wersja.

UPDATE: Trochę ponarzekałem na powtarzanie się audycji i utworów w Radio Baobab, a tymczasem przypadkiem się okazało, że są dostępne dwa streamy: Radio Baobab Live oraz Audycje Radia Baobab. Słuchałem audycji… Przestawiam się na Live.