Obsługa dźwięku w Linuksie – cz. 3 OSSv4 9


W poprzednich artykułach z tego cyklu omówiłem ogólnie zasady działania ALSA i PulseAudio. Jest to domyślny duet odpowiedzialny za obsługę dźwięku w Ubuntu. Chociaż zaczyna to być uznawane za standardowe rozwiązanie, a nowe aplikacje są tworzone głównie z myślą o nim, to jednak nie jest to jedyne wyjście. Zarówno starym wyjadaczom, jak i osobom wrażliwym na punkcie jakości audio musiał obić się o uszy system obsługi dźwięku zwany OSS, który w swojej czwartej odsłonie ma wiele do zaoferowania.

OSS to akronim słów Open Sound System (z ang. Otwarty System Dźwięku). Początków tego rozwiązania należy szukać we wczesnych latach dziewięćdziesiątych. Na PC-tach królowała wtedy tylko jedna karta dźwiękowa, mianowicie Sound Blaster 16. Układowi temu zapewniono wtedy na Linuksie solidne wsparcie zarówno od strony sterowników, jak i API dla programów. Wszyscy inni producenci kart dźwiękowych, żeby zaistnieć na rynku musieli produkować klony Sound Blastera. Z tego powodu sterowniki do nich były naturalnie dołączane do oryginalnych sterowników Sound Blastera, a te z kolei rozrosły się do kompleksowego rozwiązania zwanego później jako OSS. API OSS jest proste, przejrzyste i dobrze udokumentowane przez co zyskało szeroką popularność wśród developerów. Kod jest pisany głównie z myślą o multiplatformowości, dzięki czemu poza Linuksem rozwiązanie zostało zaadoptowane do innych Uniksów, takich jak *BSD, Solaris, AIX, gdzie do tej pory jest standardowo używane. Tak wyewoluowało OSS w wersji 3. Miało ono jednak swoje wady. Brak było możliwości programowego miksowania dźwięku, podczas gdy coraz więcej producentów kart dźwiękowych odchodziło od sprzętowego miksowania. Nie można też było kontrolować głośności z podziałem na aplikacje, a możliwość blokowania urządzenia audio przez aplikacje wywoływała częste frustracje. Rozwiązania tych problemów podjęła się firma 4Front Technologies i po długim okresie prac wydała OSS w wersji 4. Przedsiębiorstwo postanowiło jednak zarobić na swojej pracy i najnowsze OSS wydano jedynie na licencji komercyjnej. Wywołało to oburzenie w społeczności Linuksowej, a w konsekwencji zaowocowało wprowadzeniem zupełnie nowego rozwiązania – ALSA, przy jednoczesnym usuwaniu OSS z jądra systemu, które całkowicie wycięto w kernelach w wersji 2.6. Mimo iż 4Front Technologies próbował naprawić swoje błędy i ostatecznie wydał OSSv4 zarówno na licencji GPL, jak i BSD, to jednak rozwiązanie to nigdy nie wróciło do jądra systemu. Pomimo to OSS jest nadal rozwijane i używane na Uniksach. Może też być stosowane na Linuksie, w tym i na Ubuntu.

Uproszczoną zasadę działania OSSv4 przedstawia poniższy schemat:

Analizując obrazek od spodu, widzimy że program lub jakaś biblioteka audio (np. GStreamer) znajdujący się w przestrzeni użytkownika kieruje dźwięk na API OSSv4. Zgodnie z Uniksową zasadą – wszystko to plik, API OSS to w rzeczywistości plik /dev/dsp. Cały dźwięk przetwarzany jest przez OSS w przestrzeni jądra. Skutkuje to najmniejszymi opóźnieniami audio w porównaniu do konkurencyjnych rozwiązań. Cały dźwięk jest też miksowany, a gdy to tylko możliwe OSS korzysta ze sprzętowego miksera dźwięku.

Zasada działania OSS jest bardzo prosta. Dzięki temu otrzymujemy dźwięk o najniższych możliwych opóźnieniach. Także sterowniki do urządzeń audio (zwłaszcza tych starych sprzed dominacji ALSA) mają opinię bycia wysokiej jakości. Pozwala to często uzyskać dźwięk o większej czystości, niż korzystając z innych rozwiązań. API OSS jest ponadto dojrzałe i bardzo dobrze udokumentowane, co na pewno cenią sobie developerzy aplikacji audio. Ponadto ciągle utrzymana jest wsteczna kompatybilność do wersji 3, dzięki czemu może z niego korzystać olbrzymia baza starszych programów i gier. Np. Doom 3 nie może natywnie obsługiwać standardowego w Ubuntu PulseAudio (kulawa kompatybilność jest zapewniona przez wrapper ALSA dla PulseAudio), ale całkowicie sprawnie radzi sobie z OSS. W odróżnieniu od wersji 3 OSS w czwartej odsłonie posiada programowe miksowanie dźwięku. Może obsługiwać także wiele kart dźwiękowych jednocześnie. Zniesiono też problem z blokowaniem urządzeń audio przez program (jeżeli program wymaga tej funkcji do działania, to OSS będzie to symulował bez faktycznego blokowania karty dźwiękowej). Warto też wspomnieć, że jednym z głównych powodów wprowadzania PulseAudio była możliwość przesyłania dźwięku po sieci, której nie zapewniała ALSA. W przypadku OSS żeby korzystać z dźwięku przez sieć wystarczy udostępnić (np. po NFS) plik /dev/dsp. Jest to prosty sposób wpisujący się znacznie lepiej w filozofię działania Unixa niż PulseAudio.

Poniżej obrazek pokazujący bardzo rozbudowane możliwości miksera dźwięku OSS.

Niestety od czasu dominacji ALSA na Linuksie dalszy rozwój OSS znacząco spowolnił. Do nowych kart dźwiękowych często brakuje sterowników lub działają one jedynie częściowo. Ponadto programiści przygotowujący aplikacje na Linuksa obecnie skupiają się jedynie na obsłudze PulseAudio lub ALSA, zapominając o OSS. Ponieważ Ubuntu jest obecnie silnie związane z serwerem dźwięku PulseAudio, to nie ma też co liczyć na to, że rozwiązania takie jak systemowe kontrolki dźwięku czy pogłaśniające i ściszające klawisze laptopa będą działać z zainstalowanym Open Sound System.

Warto też coś wspomnieć o programach zdolnych do obsługi OSS. Wiele starszych gier i aplikacji, które chcą się kontaktować ze sterownikami kart dźwiękowych jest zdolnych do obsługi API OSS. Do tego grona można między innymi zaliczyć produkty firmy idSoftware. Także aplikacje wyspecjalizowane w przetwarzaniu i przerabianiu  dźwięku niemalże obligatoryjnie wspierają bezpośrednio OSS. Jako przykład można podać tu potężny i uniwersalny odtwarzacz multimediów MPlayer. Teoretycznie przy pomocy bibliotek audio da się też cały dźwięk skierować na OSS. PulseAudio może nie tylko korzystać ze sterowników ALSA, ale po odpowiednim przekonfigurowaniu także z Open Sound System. Panuje jednak pogląd, że korzystanie z PulseAudio redukuje wszelkie zalety OSS. Także GStreamer i ALSA mogą przekazywać dźwięk wprost do /dev/dsp, dzięki czemu OSS może uzyskać kompatybilność z nowymi aplikacjami Linuksowymi. Podsumowując OSS w najnowszej 4 odsłonie to olbrzymi postęp względem wersji trzeciej. Rozwiązanie to w porównaniu do ALSA i PulseAudio ma zarówno wady jak i zalety. Chociaż na nowym laptopie wady najprawdopodobniej będą zdecydowanie górować nad zaletami, to na starym komputerze stacjonarnym może być całkowicie odwrotnie. Wszystkich, którzy chcieliby przetestować OSS na własnej skórze zapraszam do tego poradnika.


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.

9 komentarzy do “Obsługa dźwięku w Linuksie – cz. 3 OSSv4

  • Olbi

    Świetny artykuł, a szczególnie cała seria. Zawsze mnie interesowało, po kiego tyle systemów dźwięku w Linuksie jest. Teraz widać, dlaczego producenci gier są zniechęceni do Linuksa 🙂

  • mario_7

    Zatem są zniechęceni, bo…?
    Przecież i tak rzadko kto wykorzystuje API sterownika bezpośrednio. Najczęściej wykorzystuje się biblioteki audio, które są uniwersalne (nawet między systemami).

  • erem

    Wyraziłem się nieprecyzyjnie. Mając na myśli notebook chodziło mi o niską wydajność komputera. Po przeczytaniu artykułów zacząłem mieć wątpliwości czy PulseAudio będzie płynnie chodziło na atomie 450 (to w nawiązaniu do nowego ubuntu 12.4 – chodzi mi o opóźnienia odtwarzanego dźwięku).
    Pisząc „jakość dźwięku” nie mam na myśli zintegrowanej karty dźwiękowej (zgodzę się, że jakość i integra NIE może występować w jednym zdaniu 🙂 ). Przesyłam dźwięk do zewnętrznego DAC-a i aktywnej zwrotnicy na wzmacniacze.
    Mam obecnie WattOs-a, chodzi to prawie dobrze są problemy przy plikach dźwiękowych próbkowanych 24/96 stąd moje zainteresowanie i obawy związane z PulseAudio.

  • Tomala

    A ja od dawna już mam problem taki, że w moim Asusie K52jc (10.04 LTS), oraz w Asusie mojej narzeczonej X54h (jakieś 11.10)
    przełączanie dźwięku między laptopowym głośniczkiem a słuchawkami działa tylko po instalacji alsa-driver-linuxant_1.0.23.1_all

    Niestety każda aktualizacja jądra powoduje konieczność nowej instalacji tego sterownika alsa.

    Pozdro dla miłośników opensource, także tych co wiedzą więcej ode mnie;)

  • akrynski

    Tak, to świetny artykuł, wiele wyjaśniający. Cała seria oczywiście. Chętnie poczytał bym „ten poradnik”, tak jak Nożyk. W pracy brakuje mi nieraz narzędzi i muszę korzystać z własnego laptopa. Niestety profesjonalne zastosowania darmowych programów są ograniczone, niekoniecznie przez licencję. W dźwięku oczywiście przez wysoką latencję. Chętnie więc poczytał bym jakie są możliwości jej ograniczenia na Linuksie, a szczególnie pod Ubuntu, do którego przywykłem.