Obsługa dźwięku w Linuksie – cz. 2 PulseAudio 16


PulseAudioPrzyszedł czas na drugi artykuł, który ma za zadanie przybliżyć czytelnikowi złożony sposób, w jaki Linux obsługuje dźwięk. W poprzednim felietonie skupiłem się na sterownikach i ich API, które znane są użytkownikom pod akronimem ALSA. Jednak wraz ze wzrostem oczekiwań względem możliwości obsługi dźwięku, developerzy wielu dystrybucji Linuksa (w tym Ubuntu) postanowili rozbudować ALSA o zaawansowane funkcje serwera dźwięku znanego jako PulseAudio.

Jak już wspomniałem PulseAudio to serwer dźwięku. W praktyce jest to złożony program działający w przestrzeni użytkownika. Jego zadaniem jest zaawansowana obróbka audio w sposób niemożliwy do osiągnięcia dla niskopoziomowej ALSA. Ponadto ma za zadanie udostępnić proste w obsłudze API, dzięki czemu można uniknąć bezpośredniej obsługi słabo udokumentowanego interfejsu sterowników. PulseAudio jest w stanie przechwycić prawie każdy dźwięk, co pozwala zrezygnować ze stosowania wielu Wrapperów, a w konsekwencji ma ujednolicić korzystanie z urządzeń audio przez każdy program w każdym środowisku. W przeciwieństwie do ALSA kod serwera jest przenośny oraz może obsługiwać API np. sterowników OSS, dzięki czemu znajduje zastosowanie także na innych Unixach (Solaris, *BSD). Upraszcza to sytuację dla programistów, którzy pragną, żeby ich program audio działał na wszystkich systemach uniksopodobnych. Zarówno Canonical, jak i RedHat zdecydowali się na zastosowanie PulseAudio w okolicach roku 2008, z powodu tych decyzji serwer zyskał szeroką adaptację i jest powszechnie stosowany. Znajdziemy go między innymi we wszystkich współczesnych wydaniach Ubuntu.

Uproszczoną zasadę działania PulseAudio przedstawia poniższy schemat (trochę dokładniejszy, ale i bardziej złożony schemat znajdziemy na Wikipedii):

Schemat budowy PulseAudio Analizując obrazek od spodu, zasada działania PulseAudio wygląda następująco. PulseAudio posiada swoje własne API, do korzystania z którego program może być wprost przystosowany. Serwer potrafi także emulować API ALSA. Naczelną zasadą jest, że PulseAudio przechwytuje każdy dźwięk komputera. Z tego powodu posiada także szereg innych wraperów, bibliotek i źródeł, co pozwala na realizację tego założenia. Następnie dzięki sieciowej warstwie abstrakcji PulseAudio jest w stanie przesłać dźwięk po sieci do innego serwera dźwięku. Jednak cała zabawa ma miejsce, w momencie, w którym dźwięk przetwarzany jest przez rdzeń. Tutaj następuje miksowanie i próbkowanie. Tak przetworzone audio jest kierowane do sterowników ALSA obecnych w jądrze systemu.

Możliwości PulseAudio są olbrzymie. Jest on w stanie przechwycić niemalże cały dźwięk systemowy (nawet ten kierowany na ALSA) i go obrobić i obsłużyć. W tym celu można użyć zaawansowanego miksera, który dodatkowo obsługuje się z podziałem na aplikacje. Pozwala na zmiany częstotliwości próbkowania dźwięku, przesyłanie dźwięku po sieci oraz wiele innych rzeczy, o których zwykły użytkownik nawet nie słyszał. Jednak co jest istotne, to prostota obsługi, którą można bez problemu zaimplementować w graficznych narzędziach. PulseAudio jest przenośne na inne systemy i z biegiem czasu zapewne uporządkuje i ujednolici obsługę dźwięku na Linuksie i innych Uniksach.

Jednak serwer ten ma też swoje cienie. Po pierwsze mimo zaklinania rzeczywistości przez developerów PulseAudio, nie ma możliwości, żeby tak rozbudowany program (i to w przestrzeni użytkownika) nie generował opóźnień dźwięku. Najdobitniej takie rzeczy można zauważyć w niektórych zaawansowanych grach wykorzystujących OpenAL i celujących w ALSA. Zdarza się, że dźwięk dobiega z głośników dopiero kilka sekund po jego emisji przez program. Równie nieprzyjemnym skutkiem niektórych opóźnień może być szarpiący, nieprzyjemny dźwięk. Tak złożony serwer nie może być też wolny od błędów, o czym szczególnie boleśnie mogą się przekonać użytkownicy np. Orca. Użytkownicy skarżą się na problemy z PulseAudio, developerzy tego serwera mówią, że to dystrybucje źle go implementują i mamy takie swoiste przerzucanie się odpowiedzialnością. Warto też zwrócić uwagę, że ze względu na to, że PulseAudio działa jedynie w przestrzeni użytkownika, to nie daje możliwości obsługi sprzętowego miksera na kartach dźwiękowych. Całe miksowanie odbywa się czysto programowo.

W nadchodzącym Ubuntu 12.04 ujrzymy domyślnie zainstalowany serwer PulseAudio w wersji 1.1. Miejmy nadzieję, że projekt dojrzewa na tyle szybko, że uda się rozwiązać kłopoty, które generuje, a jednocześnie będzie można skorzystać ze wszystkich zalet, które oferuje. PulseAudio także nabiera tempa rozwoju i zapożycza cykl wydań wprost z Chrome i Firefoksa. Już za kilka tygodni powinna ukazać się wersja 2.0,  a co cztery miesiące otrzymamy kolejne duże wydanie. Developerzy projektu ponadto obiecują dominację na świecie do grudnia 2012. 😉

PulseAudio i ALSA to podstawowy duet do obsługi dźwięku, który znajdziemy w Ubuntu. Jednak nie są to jedyne opcje. Można skorzystać z innych rozwiązań, o których będzie mowa w kolejnych artykułach.


Dodaj komentarz

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

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.

16 komentarzy do “Obsługa dźwięku w Linuksie – cz. 2 PulseAudio

  • Piotr

    Największą wadą jest przetwarzanie wszystkiego programowo. Komputer wyposażony w P4 2,5 GHz podczas rozmowy Skype na PulseAudio nie jest w stanie obsługiwać płynie innych aplikacji. Przy dodatkowo włączonej przeglądarce dźwięk się zacina. Używanie samego alsa daje ogromny skok wydajności systemu. (Ubuntu 11.10).

  • piotr

    Fajne artykuły. Prosto i szybko wytłumaczone. Dzięki.

    Martwi mnie ta różnorodność sterowników i usług, chaos standardów, brak zdecydowania i jakiegoś sensownego przywództwa. Jak mówi przysłowie „the man who chases two rabbits catches none”.

  • pawel

    @Piotr 20/03/2012 o godzinie 09:09

    Sprobuj „wlaczyc” w configu (daemon.conf) demona pulseaudio:
    high-priority = yes
    realtime-scheduling = yes
    default-fragments = 8
    default-fragment-size-msec = 50
    i skype powinien dzialac dobrze. Tych dwoch ostatnich opcji nie jestem pewien. Znalazlem to kiedys na sieci… a nie uzywalem skype juz od dawna.

  • baker87

    Szkoda, że przy każdym Ubuntu obojętnie w jakim programie piosenki przeskakują kolejno na inną bądź całkowicie wywala i trzeba samemu włączać co się chce na nowo :/
    Nie wiem czego to wina ale to jest żenujące. Szukałem rozwiązań ale nie znalazłem, Jedynie Fedora tego problemu nie miała.

  • herp derp

    Jedyna użyteczna rzecz, jaką z PulseAudio można zrobić, to od razu po instalacji systemu:

    sudo apt-get –purge pulse*
    (albo coś w tym stylu).

    Zwłaszcza jeśli ktoś ma jakąś lepszą (acz niekoniecznie nowszą) kartę dźwiękową, niż integry z płyt głównych, np takiego poczciwego SoundBlastera Live 5.1!…

  • Szala

    Mi tam sama idea PulseAudio bardzo przypadła do gustu.

    Podoba mi się to, że gdy wracam do domu po ciężkim dniu, uruchamiam u siebie na laptopie np. grę/muzykę/youtube to dźwięk od razu płynie z głośników bez zbędnego przełączania kabli. 🙂

    Mam po prostu w domu prosty serwerek, a do niego podpięte lepsze głośniki.

    Według mnie jest to genialne ale niektórzy mogą się z tym nie zgodzić. 😉

  • dupadupa

    Jak tylko stawiam ubuntu, wypierdzielam pulseaudio w kosmos. Spowalnia system, uniemozliwia korzystanie ze Skype i generalnie jest imao do dupy. Oczywiscie cierpie na tym, glownie dlatego, ze od dystrybucji bodaj 10.x soundindicator jest zintegrowany z pulse, wiec i jego musze wypierniczac, a zeby zmienic glosnosc jestem zmuszony odpalac caly alsamixer, ale dla takiego skoku wydajnosci, ktory swoja droga przeklada sie tez de facto na lepsza jakosc dzwieku, warto. Pulse jest najwiekszym gownem jakie dotad odkrylem w linuxie, dziekuje dobranoc.

  • sara

    Ja i tak nie bardzo rozumiem o co chodzi z tym wszystkim, ale wiem jedno, od dystrybucji, 7.04 bo wtedy namówiono mnie na UBUNTU t o ciągłe kłopoty są z dżwiekiem. Ja jestem osobą „starszą” więc chciałabym aby potraktowano mnie nieco ulgowo. Teraz mam Xubuntu 11,10 i po kilku aktualizacjach znowu mam kłopot z dxwiękiem. A na forum są sami mądrzy ludzie wiec gdzie by tam zajmowali się jakąś „babcią”. I tym sposobem pozostaję bez dźwieku. A wszystkie dyskusje „wymądrzalskich” czytam i nic nie rozumiem. Pozdrawiam.
    Przepraszam nie chciałam nikogo obrazić.

  • Daniel

    @dupadupa
    Sęk w tym, że mają SBcośtam nie wie się o dobrym dźwięku NIC.
    Z chwilą, gdy wydało się, iż próbkowanie 96kHZ/24B jest najpierw „zjeżdżane do 44100/16 i potem znów resamplowane i dzielone na 5.1 (ha ha ha) cały misterny plan poszedł w…
    I też żenujące filtry a’la tunel, lodówka, szambo. Ehhh, że też renderowanie dźwięku 3D zostało zaprzepaszczone.
    Kupiłeś kartę za grube pieniądze – ciesz się tym „kosmosem” , ale o jakości dźwięku nie pisz.
    I o dziwo właśnie PulseAudio obsługuje Twoją kartę niż ALSA, czy OSS, który w ogóle nie był wstanie przebrnąć przez ten koszmar resamplingu, nadpróbkowania i chamskiego robienia klientów w bambuko 🙂
    Bez urazy.

  • Leopard

    Jak to zmiksować, żeby mój rozmówca na Skype słyszał też dźwięki z aplikacji? Programem tym jest „mono”, który się pojawia na liście odtwarzających programów, ale nie potrafię zmusić PA do tego, by i tamten dźwięk mieszał się z mową przez mikrofon… pod Windows ustawiało się źródło nagrywania „Stereo Mixer” i potem, przynajmniej na paltalku, można było odtwarzać muzykę i mówić.

  • Leopard

    Na razie sobie poradziłem – niektóre strumienie mają ustawione niskie (5%) wzmocnienie wstępne, przez co nie są słyszalne przez rozmówcę na Skype. Włączyłem menedżera Pulseaudio i zwiększyłem wzmocnienie – rozmówca usłyszał. Aczkolwiek zmieniam postać pytania: Czy można miksować dźwięki pochodzące z różnych kart dźwiękowych?