Poradnik PC-Audio by Audiomagic.pl - część pierwsza
Wstęp
Niniejszy poradnik jest zestawieniem informacji o PC-Audio dla wszystkich, którzy chcą poprawić brzmienie swoich komputerów. Rozpoczniemy krótkim wprowadzeniem do tematyki transmisji danych audio z komputera do przetwornika cyfrowo-analogowego i problemów z nią związanych. Zaprezentujemy również przykładową konfigurację ASIO4ALL, która będzie przydatna w wielu programach audio. W kolejnych częściach zaprezentujemy najciekawsze pod względem dźwięku (naszym zdaniem) odtwarzacze - zarówno płatne jak i darmowe. Pojawią się tu zarówno popularny Foobar2000 i Winamp, jak i bardziej egzotyczne playery - XXHighend, Jplay czy StealhAudioPlayer.
Czym jest bit-perfect?
Dla tych, którzy po raz pierwszy spotykają się z określeniami bit-perfect, ASIO i WASAPI należy się kilka słów wyjaśnienia.
Rozwiązania stosowane w systemach operacyjnych mają negatywny wpływ na jakość dźwięku – często dane, które otrzymuje DAC różnią się od tych zapisanych w plikach. Dochodzą do tego problemy z jitterem i zakłoceniami generowanymi przez zasilacz.
Winę za błędy danych ponoszą dwa procesy – resampling i cyfrowa kontrola głośności, należące do zadań systemowego miksera dźwięku.
Resampling to zmiana częstotliwości próbkowania sygnału. Może być on wymuszony przez ustawienia karty dźwiękowej lub spowodowany sumowaniem sygnałów z dwóch aplikacji o różnych szybkościach próbkowania. W dużym skrócie polega na rozciągnięciu bądź zagęszczeniu odstępów czasowych między kolejnymi próbkami sygnału. Powstaje wówczas problem wyliczenia wartości sygnału w chwilach dla których nie istnieją dane. Idealnie byłoby, gdyby algorytm wyliczył wartości próbek identyczne z tymi, które pojawiłyby się gdyby oryginalny sygnał spróbkowano z inną częstotliwością (pomijamy tu kwestię różnej szerokości pasma). Tak dokładne odwzorowanie wymaga dużej mocy obliczeniowej. W systemie operacyjnym niedopuszczalne jest spowolnienie pracy podczas odtwarzania audio – więc używa się szybkich algorytmów. Niewłaściwe algorytmy resamplingu mogą spowodować dzwonienie w górze pasma, zniekształcenia harmoniczne, aliasing sygnału, wprowadzenie szumu a w najgorszych wypadkach przesunięcie fazowe wybranych częstotliwości sygnału, co w praktyce uniemożliwia odtworzenie oryginalnej barwy dźwięku.
Polecamy zapoznanie się ze stroną src.infinitewave.ca, gdzie zamieszczono profesjonalne wykresy parametrów różnych resamplerów. Bardzo dobrze spisuje się całkiem darmowy SoX, dostępny również jako wtyczka do Foobara.
Drugim czynnikiem mającym negatywny wpływ na jakość dźwięku jest cyfrowa kontrola głośności. Standardowo dźwięk zapisany jest jako kolejne 16-bitowe liczby, reprezentujące wartość sygnału elektrycznego w oddalonych o okres próbkowania chwilach czasu. 16 bitów oznacza 65536 kombinacji, przy czym każde dwukrotne zmniejszenie głośności powoduje zmniejszenie rozdzielczości o połowę (tracony jest ostatni bit), a jeżeli wartości sygnału dzielimy przez liczbę niebędącą potęgą dwójki potrzebne są jeszcze dodatkowe obliczenia. Ściszenie dźwięku powoduje bezpowrotną utratę informacji zawartych w najmłodszych bitach sygnału audio. Na to nakładają się jeszcze problemy z liniowością samych DACów.
W dużym uproszczeniu - dobranie rezystorów w układzie przetwornika cyfrowo-analogowego tak, aby przez kolejne, odpowiadające coraz mniej znaczącym bitom gałęzie płynął za każdym razem dwukrotnie mniejszy prąd jest praktycznie niemożliwe w technologii przetworników scalonych. Liniowość dla niskich poziomów głośności zawsze będzie lepsza w przetwornikach dyskretnych, tj. złożonych z pojedynczych elementów.
Jeżeli przetwornik obsługuje strumień 24-bitowy cyfrowa kontrola głośności będzie obcinać bity nadmiarowe i zachowamy pełną rozdzielczość 16-bitowych plików. Warunkiem jest włączenie w naszym odtwarzaczu konwersji sygnału do formatu 24-bitowego. Wtedy obniżanie głośności będzie obcinać wypełniony zerami „ogon” i nie będzie żadnych strat w domenie cyfrowej aż do poziomu 1/256 głośności maksymalnej. Oczywiście wciąż musimy się liczyć z ewentualnym pogorszeniem liniowości w domenie analogowej.
Tryb bit-perfect to taki tryb pracy programu, w którym dane audio przesyłane są do sterownika karty dźwiękowej w niezmienionej postaci, z pominięciem resamplingu i kontroli głośności w mikserze systemu. Jeśli te procesy są konieczne, lepiej żeby zajmował się nimi profesjonalny odtwarzacz.
Do osiągnięcia bit-perfect potrzebny jest stosowny interfejs, czyli pomost pomiędzy aplikacją a sterownikiem karty dźwiękowej omijający łańcuch przetwarzania audio systemu. Typowymi rozwiązania to Kernel Streaming, ASIO i ekskluzywna sesja WASAPI.
Kernel Streaming
Jest to tryb bezpośredniego przesyłania danych audio do sterownika karty dźwiękowej. W Windows XP jest niekompatybilny z dużą częścią USB DACów, za to Windows 7 działa poprawnie i jest polecany przez autorów Jplay i XXHighend.
ASIO – Audio Stream Input Output
Interfejs ASIO został opracowany przez firmę Steinberg (oddział Yamahy), twórcy m.in. Cubase. Obecnie ASIO jest obsługiwane przez wszystkie programy muzyczne i większość odtwarzaczy, choć w wielu wypadkach konieczne będzie pobranie odpowiedniej wtyczki. Aby karta dźwiękowa obsługiwała ASIO producent musi napisać odpowiednie sterowniki, co jest standardem dla kart studyjnych. Dla kart bez takich sterowników ratunkiem jest ASIO4ALL – aplikacja pozwalająca na emulowanie funkcji ASIO.
ASIO4ALL w uproszczeniu działa na zasadzie konwersji strumieni ASIO do Kernel Streaming, choć działa z większą liczbą kart.
WASAPI – Windows Audio Session Application Programming Interface
Interfejs ten, wprowadzony w Windows Vista pozwala na pominięcie miksowania dźwięku i podnosi priorytet aplikacji multimedialnych oraz dba o ciągłość transmisji i niskie opóźnienia. Działa na każdym urządzeniu audio obsługiwanym przez system. Nas w szczególności interesuje tryb WASAPI Exclusive, gwarantujący najbardziej czystą i stabilną komunikację z kartą dźwiękową, dając aplikacji odtwarzającej wyłączność na urządzenie.
Optymalizacja systemu – Fidelizer
Gdy już wyjaśniliśmy sobie dlaczego należy pominąć mikser systemu Windows zastanówmy się chwilę nad kolejnym zagadnieniem – optymalizacją systemu. Dlaczego w ogóle jest potrzebna? Wydaje się, że dla współczesnego komputera zachowanie poprawności odstępu przetwarzania to pestka.
Niestety jest zupełnie odwrotnie – jednoczesna praca wielu programów, procesów, obsługa przerwań i przełączanie kontekstów powodują problemy zarówno w domenie programowej jak i sprzętowej. System nie jest w stanie zachować wymaganej dokładności, a zasilacz generuje zakłócenia elektryczne. Programy takie jak XXHighend i Jplay zawierają specjalne instrukcje "wyciszające" system. Można jednak skorzystać z podobnych usprawnień dla wszystkich programów dzięki Fidelizerowi.
Strona programu znajduje się pod adresem: http://www.windowsxlive.net/fidelizer
Do wyboru są trzy opcje. Opcja Audiophile nie ogranicza w żaden sposób funkcjonalności komputera. Opcja Extremist powoduje że przestaje działać wiele usług, takich jak drukowanie, sieć lub obsługa tabletów (te dwie ostatnie opcje można jednak zachować, zaznaczając odpowiednie pola pod listą wyboru). Szczegóły na temat działania programu znajdują się na jego stronie.
Konfiguracja ASIO4ALL
Na potrzeby artykułu zestawiono przykładową, popularną konfigurację – kartę zintegrowaną oraz zewnętrzny DAC USB.
Plik instalacyjny można pobrać z www.asio4all.com. Program najlepiej zainstalować na domyślnych ustawieniach.
Po instalacji ASIO4ALL odkryjemy, że ani w menu start, ani w folderze programu nie na opcji konfiguracji. Jest to celowy zabieg – właściwa konfiguracja uruchamia się wewnątrz każdego programu z osobna a ustawienia są indywidualnie zapamiętywane.
Uruchomienie panelu ASIO4ALL odbywa się inaczej w każdym programie, ale gdy raz skonfigurujemy panel można go szybko uruchomić z zasobnika systemowego przez dwukrotne kliknięcie kiedy włączone jest odtwarzanie. Po wprowadzeniu zmian należy zatrzymać odtwarzanie lub zrestartować program.
Po kliknięciu na ikonkę z kluczem pojawiają się zaawansowane opcje.
Za pomocą ikonek włączników po lewej stronie należy teraz wybrać używaną kartę dźwiękową i ustawić zaawansowane opcje. Poniżej zostały przedstawione typowe konfiguracje dla kart zintegrowanych i kart USB DAC.
Karta zintegrowana
Poniżej pokrótce wyjaśniamy znaczenie wybranych parametrów i sposób ich konfiguracji:
Latency Compensation – Jeżeli znamy długość dodatkowych opóźnień sterownika oraz aplikacji odtwarzającej możemy je tu wpisać, niemniej jednak najbezpieczniej będzie korzystać z ustawienia 0.
Allow Pull Mode (WaveRT) – dostępny od systemu Windows Vista. Pozwala włączyć dodatkowy tryb wysyłania danych do karty dźwiękowej. Jeżeli jego działanie nie powoduje błędów odtwarzania można tę opcję spokojnie zostawić włączoną.
Always Resample 44.1kHz <-> 48kHz – nie należy włączać tej opcji. Powoduje ona programowe PRZEBRÓBKOWYWANIE SYGNAŁU do 48kHz i jest pomyślana dla starych kart, które tej częstotliwości nie obsługują lub udają że obsługują i w rzeczywistości stosują wewnętrzny resampling (większość kart standardu AC’97).
ASIO Buffer Size – rozmiar bufora ASIO należy ustawić tak, by dźwięk był poprawny, a jednocześnie rozmiar bufora jak najkrótszy. Proponujemy ustawienia z przedziału 256-512.
Przetwornik USB
W przypadku USB różnice są niewielkie i sprowadzają się głównie do zwiększenia wartości parametru Kernel Buffers. Opcja Hardware Buffer z reguły nie działa na kartach USB.
Ustawienia odtwarzaczy
Z racji na bardzo długie wprowadzenie opiszemy tylko pobieżnie konfigurację Winampa i Foobara2000. W następnym wydaniu opiszemy je szczegółowo i przestawimy kolejne playery.
Winamp
Link do wtyczki ASIO:http://otachan.com/out_asio(exe)_070.7z
Ustawienia wyboru wtyczki wyjściowej znajdują się w preferencjach (skrót: CTRL + P) w zakładce Plugins -> Output.
Sugerujemy nie zmieniać nic w ustawieniach – ważne jest aby nasz sterownik ASIO był wybrany z listy rozwijanej. Można również w ramach eksperymentu włączyć opcję Gapless mode, która emuluje odtwarzanie bez przerw – z mniejszym lub większym sukcesem. Plugin posiada również wysokiej jakości resampler.
Foobar2000
Linki do wtyczek: http://www.foobar2000.org/components/view/foo_out_asio
http://www.foobar2000.org/components/view/foo_out_ks
http://www.foobar2000.org/components/view/foo_out_wasapi
Ściągnięte pliki z rozszerzeniem .dll należy skopiować do katalogu Components w folderze instalacyjnym foobara.
Ustawianie ASIO w Foobarze jest nieintuicyjne i sprawia problemy. Dlatego zostanie przestawione krok po kroku:
1. Otwieramy ustawienia programu skrótem CTRL+P lub w menu File-> Preferences
2. Otwieramy zakładkę Playback->Output->ASIO Virtual Devices i klikamy na Add New
Ukazuje się okno z podsumowaniem konfiguracji kanałów ASIO. Z listy rozwijanej wybieramy domyślna pozycję ASIO4ALL v2 (jeżeli posiadamy kartę, do której producenci dostarczyli sterowniki ASIO będą tam również inne pozycje) i klikamy na przycisk configure. Pojawi się panel ASIO, który konfigurujemy według wcześniejszych instrukcji. Po ustawieniu panelu otwieramy ponownie zakładkę ASIO Virtual Devices (z pkt.2) i klikamy podwójnie na ostatnio stworzonym wirtualnym urządzeniu ASIO. Jeżeli w widoku listy „Channel Map” dane są prawidłowe (Nazwa karty – 32 bit – left/right) możemy przejść do następnego kroku.
Ostatnią czynnością jest ustawienie ASIO jako domyślnego urządzenia.
Dokonuje się tego na karcie Playback -> Output z listy rozwijanej Device
WASAPI w foobarze jest o wiele łatwiejsze do ustawienia niż ASIO. Można również skorzystać z funkcji Kernel Streaming.
Dla chcących poeksperymentować polecamy użycie starszej wersji Foobara – 0.8.3 z wtyczkami ASIO Otachana, które można znaleźć pod linkiem: http://otachan.com/StoreRoom.html. Nowsze kompilacje znajdują się pod adresem: http://personales.ya.com/angel49/foobar2000_otachan/
Na zakończenie
Mamy nadzieję że będzie wam dane przekonać się na własne uszy dlaczego warto poświęcić chwilę konfiguracji peceta jako źródła dźwięku. Liczymy na wasze komentarze odnośnie odczuwalnych zmian w dźwięku. W następnym wydaniu przedstawimy bardziej zaawansowane opcje Foobara oraz całkiem nowe odtwarzacze o niezwykłej jakości dźwięku.