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.

8 odpowiedzi na “Optymalizacja MPD.”

  1. A powiadali, ze mpd jest takim super daemonem, co prawie nic z procka nie korzysta. Ale skoro korzysta z streamingu, to musi być odzwierciedlone w w TOPie..

  2. Szczerze mówiąc, to, że korzysta, to dopiero w top zauważyłem. W przeciwieństwie do innych playerów (no dobra, mplayer podobnie, ale średnio wygodnie się go obsługuje, szczególnie jeśli chcesz zrobić dedykowaną maszynkę do muzyki) odczuwalność jego działania jest zerowa. W porównaniu z innymi playerami wypada bdb.

    Cudów nie ma – strumień trzeba przecież zdekodować. Natomiast na resamplingu można powalczyć.

  3. @XANi: Dzięki, nie znalazłem tego wpisu wcześniej. Niestety, wygląda, że moja karta dźwiękowa (tania na USB, w lsusb przedstawia się jako: Bus 001 Device 003: ID 0c76:1607 JMTek, LLC. audio controller) nie obsługuje 44100 Hz. A przynajmniej nie udało mi się jej do tego zmusić (Twoją metodą także – zrobiłem szybki test i zarówno zużycie procesora, jak i cat na opcjach karty jak dla resamplingu).

  4. Hmm ja nie zauważyłem tego problemu. MPD streamingujące z RMF MAXX pożera mi do 3% czasu procesora w szczycie. Ale ja mam do tego dedykowaną maszynkę z P3 i kartą SB Live, więc pewnie dlatego tak mało.
    Swoją drogą ja ostatnio szukam sposobu by oglądać np. film z YouTube na lapku z Ubuntu i mieć dźwięk przez serwer z Debianem. Ale pogubiłem w tych wszystkich ALSAch, PulseAudio itp.
    Tak czy siak fajny wpis!. Pozdrawiam.

  5. @regisu: Prawdopodobnie SB Live działa w 44.1 kHz. cat /proc/asound/card0/pcm0p/sub0/hw_params w trakcie odtwarzania prawdę Ci powie.

    Jeśli chodzi o to, co piszesz (działanie aplikacji na jednej maszynie, przerzucanie dźwięku na drugą i tam karta dźwiękowa i np. wieża), to prawdopodobnie – z tego co szukałem – PulseAudio potrafi to zrobić. W sumie zbieram się do podobnego rozwiązania, ale to co mam w tej chwili działa, a leniwy jestem. Daj znać/opisz jak coś znajdziesz.

  6. @Bartek: Ale przy nieuziemionym chyba to inaczej wygląda? Tzn. raczej jest to szum/bzyczenie i słyszalne nawet jak nic nie leci, prawda?

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *