Audiofilski odtwarzacz muzyki z Raspberry Pi

Audiofilski odtwarzacz muzyki z Raspberry Pi
Pobierz PDF Download icon
Projekty audio w Elektronice Praktycznej nieustannie, praktycznie od początku jej istnienia, cieszą się dużym powodzeniem. Powstają coraz to nowsze konstrukcje, które albo są coraz mniejsze, albo pozwalają uzyskać lepszy dźwięk, albo pobierają mało mocy, albo też korzystają z nowych podzespołów. Trudno spośród nich wybrać najlepszy, gdyż najczęściej te dopracowane pod względem charakterystyk, są mało wygodne w użytku, podczas gdy urządzenia z ciekawym interfejsem, cechują się słabą jakością dźwięku. W niniejszym projekcie pokazujemy zupełnie odmienne podejście do tworzenia odtwarzacza audio. Koncentrując się na oprogramowaniu i korzystaniu z gotowych modułów, prezentujemy jak przygotować miniaturowy, audiofilski odtwarzacz.

Świat audiofilów uległ wyraźnej zmianie w przeciągu ostatnich kilku lat. Widać to choćby podczas zwiedzania warszawskich targów Audio Show, w których trakcie prezentowane są systemy audio o wysokiej jakości, oferowane czasem w zupełnie abstrakcyjnych cenach.

Gdy kilkanaście lat temu wystawę organizowano po raz pierwszy, dominowały odtwarzacze CD i wzmacniacze wielokanałowe do systemów kina domowego, z których większość miała postać klasycznych segmentów Hi-Fi. Na rynek wchodziły płyty Super Audio CD i DVD-Audio, co sugerowało, że przyszłość muzyki należy do cyfrowych formatów optycznych o dużej częstotliwości próbkowania lub o dużej rozdzielczości bitowej.

Z upływem lat okazało się, że ani SACD ani DVD-Audio nie zyskały większego grona zwolenników, systemy wielokanałowe pozostały domeną tylko kina domowego, wzrosła popularność płyt gramofonowych. Natomiast producenci odtwarzaczy klasy High-End zauważyli, że użytkownicy coraz bardziej preferują puszczać muzykę z laptopa, albo słuchać jej z telefonu komórkowego.

Poskutkowało to pojawieniem się masywnych odtwarzaczy z dyskami twardymi i dużymi wyświetlaczami LCD, które ani nie były wygodne w obsłudze, ani nie wyglądały atrakcyjnie i także praktycznie odeszły w zapomnienie. Ale trend wśród użytkowników się nie zmienił i - co widać choćby po tegorocznym Audio Show - producenci objęli nieco inną strategię, w której ramach tworzą komponenty, wpasowujące się w ekosystem technologiczny, z jakim przeciętny człowiek ma do czynienia.

Cechy idealnego odtwarzacza

Jaki powinien być idealny, audiofilski odtwarzacz muzyki? Przede wszystkim powinien pozwalać na dostarczanie bardzo wysokiej jakości dźwięku oraz umożliwiać korzystanie z różnych formatów, czy też źródeł muzyki. Powinien być też wygodny w obsłudze, nieduży, bezgłośny (niegenerujący żadnego szumu) i najlepiej energooszczędny.

Powinien móc korzystać nie tylko z zasobów audio, zgromadzonych w postaci plików w sieci lokalnej, czy na podłączonym do niego nośniku, ale też pozwalać na dostęp do popularnych ostatnio serwisów streamujących.

Powinien być również zdalnie sterowany, najlepiej z użyciem kontrolera z ekranem dotykowym, bądź - jeśli ktoś woli - za pomocą klasycznego mechanicznego pilota. Okazuje się, że takim odtwarzaczem, a raczej elementem zestawu, może być niedrogi Raspberry Pi!

Volumio

Stworzenie takiego odtwarzacza jest łatwe i powinien sobie poradzić z tym nawet średnio-zaawansowany użytkownik komputera. Wystarczy skorzystać z gotowego oprogramowania, kompatybilnego z Raspberry Pi, wgrać je i odpowiednio skonfigurować.

W przypadku omawianego projektu wykorzystano oprogramowanie Volumio, które bezpłatnie można pobrać ze strony http://volumio.org (rysunek 1). Całość, od rozpoczęcia pobierania, do początku odtwarzania muzyki może zająć nawet niecałe 10 minut.

Rysunek 1. Strona internetowa Volumio

Rysunek 2. Nagrywanie obrazu Volumio na kartę SD

Pobrany obraz należy rozpakować i nagrać na kartę SD, za pomocą takiego oprogramowania jak np. Win32 Disk Imager (pod systemem Windows - rysunek 2). Spakowany obraz w wersji 1.55 dla Raspberry Pi zajmuje około 300 MB, a po rozpakowaniu rośnie do 1,7 GB.

Kartę SD umieścić w Raspberry Pi, podłączyć kabel ethernetowy, lub kompatybilną z Raspberry Pi kartę Wi-Fi na USB, ewentualny dodatkowy nośnik danych na USB oraz słuchawki lub głośniki. Tu dostępne są dwie możliwości:

Można skorzystać z wyjścia słuchawkowego audio, które jest słabej jakości, ale stanowi bardzo tani sposób na korzystanie z odtwarzacza. Jeśli chce się podłączyć do niego głośniki, konieczne jest użycie modelu ze zintegrowanym wzmacniaczem lub po prostu podłączenie wyjścia słuchawkowego do wejścia wieży stereo.

Można też skorzystać z cyfrowego przetwornika audio wysokiej jakości, podłączanego przez USB (lub ew. I²S). W tym leży klucz do sukcesu, tj. do osiągnięcia bardzo wysokiej jakości dźwięku. Interfejs cyfrowy, jakim jest USB, pozwala na przesył sygnału niemal niezniekształconego, tj. identycznego pod względem kolejnych bitów z sygnałem źródłowym, a jedynym problemem jest jitter (patrz ramka).

Na koniec należy podłączyć zasilanie i już po kilku chwilach można korzystać z urządzenia. Wystarczy wejść przeglądarką internetową pod adres http://volumio.local, gdzie dostępne są przyciski odtwarzania i regulacji dźwięku oraz informacja o aktualnie odsłuchiwanej muzyce.

W przypadku gdy urządzenie jest w innej podsieci, trzeba albo wpisać jego adres IP, upewniając się przy tym, że trasy pomiędzy sieciami są poprawnie zdefiniowane, albo skorzystać z narzędzia do obsługi protokołu Bonjour, a więc służącego do łatwego wykrywanie urządzeń w sieci.

Jitter w USB Audio

Choć mogłoby się wydawać, że cyfrowy interfejs, jakim jest USB, powinien przesyłać sygnał audio bez jakichkolwiek zniekształceń, nie jest to prawdą. Problemem jest odtworzenie dźwięku analogowego na podstawie cyfrowego, przy czym trudność nie leży w generowaniu odpowiednich napięć, ale w taktowaniu tego procesu.

Nawet najlepszy przetwornik cyfrowo-analogowy (określany mianem DAC), jaki można kupić na rynku będzie podatny na jitter sygnału USB, generowanego przez - w tym przypadku - Raspberry Pi. W zależności od jakości sygnału zegarowego i interfejsu USB komputera (źródła cyfrowego sygnału audio), sygnał docierający do przetwornika DAC będzie mniej lub bardziej równo taktowany w czasie. Prowadzenie konwersji cyfrowo-analogowej w rytm zegara z USB będzie skutkowało sygnałem analogowym, którego poziomy napięć będą poprawne (z dokładnością zależną od jakości DAC), ale będą w pojawiać się w niedokładnie tych chwilach, w których powinny, co powoduje zniekształcenie fali audio.

Z jitterem można walczyć, ograniczając go na kilka sposobów, ale czasem prowadzi to do powstawania innych problemów. W praktyce stosuje się pętle synchronizacji fazy lub konwersję częstotliwości próbkowania, które poprawiają jakość dźwięku, ale nie są rozwiązaniami definitywnymi (pierwsze tylko ogranicza zależność od jitteru, a drugie zmienia niech charakterystykę brzmienia). Alternatywą jest zastosowanie bufora, w którym przechowywane są dane odbierane przez USB, a następnie, z użyciem precyzyjnego sygnału zegarowego, odtwarzane na nowo, już zupełnie niezależnie od jitteru sygnału źródłowego. Niestety, aby uniknąć przerw w dźwięku, wynikających z niezależnych od siebie temp zapełniania i opróżniania bufora, często konieczne staje się korzystanie z dosyć dużego buforowania, co w przypadku aplikacji audio-wideo prowadzi do utraty synchronizacji dźwięku i obrazu.

Na szczęście, problem jitteru w tego typu konstrukcjach ma znikomy wpływ na jakość odtworzonego sygnału audio, w porównaniu do problemów związanych z transmisją analogową. Ponadto mechanizmy korekcji jitteru jeszcze bardziej go minimalizują, sprawiając że powstające zniekształcenia są na trudnym do zauważania powodzie. Mimo to istnieją badania mówiące, że tego typu zniekształcenia (w dziedzinie czasu) są przez ludzkie ucho silniej postrzegane niż np. szumy (zniekształcenia addytywne), dlatego mogą mieć wpływ na odbieranie dźwięku nawet jeśli są na niższym poziomie niż np. szumy wzmacniacza. Wynika to podobno z faktu, że ludzki umysł jest przystosowany do odfiltrowywania wszelkiego rodzaju szumów i hałasów utrudniających postrzeganie właściwego sygnału audio, a do ignorowania zniekształceń czasowych już nie.

Konfigurowanie

Volumio działa "od ręki" i wymaga konfigurowania tylko wtedy, gdy użytkownik chce skorzystać z zewnętrznych źródeł audio (tzn. niepodłączonych bezpośrednio do Raspberry Pi) lub gdy chce rozwiązać jakieś problemy lub dostosować urządzenie do swoich preferencji.

Menu Volumio, w widoku z przeglądarki, podzielone jest na 7 opcji:

  1. Aktualnie odtwarzana muzyka.
  2. Ustawienia biblioteki.
  3. Ustawienia odtwarzania.
  4. Ustawienia sieci.
  5. Ustawienia systemowe.
  6. Informacje o twórcach.
  7. Wyłączanie urządzenia.

Rysunek 3. Ekran główny Volumio

Rysunek 4. Źródła muzyki

Pierwsza z opcji przekierowuje na ekran główny urządzenia (rysunek 3). Oprócz włączania kolejnych ścieżek, pozwala na przeglądanie biblioteki zasobów oraz tworzenie list odtwarzania. Przycisk ustawień biblioteki prowadzi do ekranu, gdzie wskazane są katalogi, z których korzysta (rysunek 4). Odpowiadają one katalogom sieciowym, udostępnianym przez Volumio w sieci lokalnej. Dostępne są trzy zasoby:

NAS, w którym przechowywane są informacje o plikach udostępnianych w ramach udziałów sieciowych lub na dyskach sieciowych,

USB, który obejmuje pliki przechowywane na nośnikach USB podłączanych bezpośrednio do Raspberry Pi,

RAM obejmujący pliki umieszczane w wirtualnym dysku twardym, tworzonym z pamięci RAM. Korzystanie z ramdysku pozwala uniknąć problemów z odtwarzaniem muzyki o bardzo dużej przepływności, która nie działałaby poprawnie przez słabo pracującą sieć bezprzewodową lub ze względu na wolny nośnik pamięci nieulotnej.

Aby dodać nowy zasób sieciowy wystarczy kliknąć przycisk ADD NEW MOUNT i wpisać jego parametry (rysunek 5):

  • Nazwę, pod jakim zasób będzie widoczny w bibliotece.
  • Protokół stosowany przez udział sieciowy.
  • Adres IP serwera, podkatalog (udział) serwera.
  • Login i hasło do zasobu.
  • Ewentualnie dodatkowe opcje, które w większości przypadków nie będą miały znaczenia.

Dodanie nowego zasobu spowoduje aktualizację biblioteki, co może trochę potrwać, w zależności od ilości zgromadzonych plików audio i szybkości połączenia z zasobem. Aktualizacja wykonywana jest automatycznie i nie przeszkadza w korzystaniu z odtwarzacza.

Rysunek 5. Dodawanie zasobu sieciowego

Rysunek 6. Konfi guracja parametrów dźwięku

W ramach ustawień odtwarzacza (rysunek 6) można wybrać, które wyjście audio ma być stosowane (czy wbudowane słuchawkowe, czy USB DAC). Należy także określić, czy regulacja dźwięku ma być sprzętowa, czy programowa, przy czym ta pierwsza nie działa z niektórymi zewnętrznymi przetwornikami, a programowa obniża jakość audio. Można też wyłączyć tę regulację i pozostawić ją na poziomie DAC.

Pozostałe opcje pozwalają ustalić, czy pomiędzy kolejnymi utworami MP3 mają być przerwy, czy pliki z audio w formacie DSD mają być odtwarzane jako PCM, czy poziom dźwięku dla poszczególnych utworów ma być normalizowany, jak duży ma być bufor audio, i w jakim stopniu ma być zapełniony, by rozpocząć odtwarzanie oraz czy biblioteka nagrań ma być automatycznie aktualizowana.

Przykładanie wagi do jakości audio widać też po dwóch ostatnich dostępnych ustawieniach. Volumio ma wbudowany mechanizm resamplowania sygnału audio, przystosowując go do określonych parametrów (rysunek 7). Dostępne opcje obejmują sygnał 16-, 24- i 32-bitowy, z próbkowaniem 44,1 kHz, 96 kHz, 192 kHz lub 384 kHz (nie wszystkie kombinacje są dostępne). Pozwala to dostosować parametry sygnału do specyfiki przetwornika, przy czym interpolację można wykonać za pomocą trzech algorytmów różniących się jakością i wykorzystaniem zasobów komputera.

Rysunek 7. Ustawienia resamplowania dźwięku

Rysunek 8. Ustawienia sieciowe

Dział ustawień sieciowych jest bardzo prosty. Pozwala ręcznie lub automatycznie, tj. z użyciem DHCP, określić adres IP i parametry sieci. Można też skonfigurować połączenie bezprzewodowe, podając nazwę sieci i hasło (rysunek 8).

W ramach ustawień systemowych (rysunek 9), użytkownik może zmienić nazwę urządzenia, pod jaką jest widziane w sieci oraz włączyć lub wyłączyć szereg usług: Airplay (stosowane przez Apple), Universal Plug and Play oraz serwer i indeksowanie DLNA.

Osoby korzystające z serwisów streamujących muzykę mogą podać nazwę i hasło użytkownika Spotify. Na razie obsługa innych serwisów tego typu (np. Tidal, oferującego muzykę z kompresją bezstratną do 1411 kbps) nie jest dostępna. Na szczęście system obsługuje dowolne radio internetowe (rysunek 10).

Rysunek 9. Ustawienia systemowe

Rysunek 10. Dodawanie radia internetowego

Można też włączyć obsługę sterownika interfejsu I²S dla przetworników korzystających z tego sposobu komunikacji, zamiast USB. W końcu ekran ustawień systemowych pozwala także na określenie, czy po uruchomieniu Volumio (tj. włączeniu się Raspberry Pi) ma być odtwarzany dźwięk informujący o tym fakcie i czy domyślnym widokiem ma być ekran biblioteki.

Twórcy Volumio zadbali też o rozwiązanie ewentualnych problemów z niektórymi przetwornikami DAC (głównie zbudowanymi w oparciu o układ CM6631) oraz postarali się samodzielnie zredukować jitter. Zastosowana taktyka nie gwarantuje dobrych rezultatów i polega na wprowadzeniu kilku modyfikacji wybranych przez programistów Volumio, które to wpływają nieco na działanie całego systemu i przez to mają też delikatny wpływ na jitter. Zaleca się samodzielne wybranie optymalnego ustawienia, na podstawie gustu, a zmiany pomiędzy brzemieniem sygnału są niewielkie.

Aplikacja mobilna

Idealny odtwarzacz miał być także wygodny w użyciu i zdalnie sterowany. Dlatego twórcy Volumio przygotowali aplikację mobilną (rysunek 11), ułatwiającą posługiwanie się odtwarzaczem z telefonu lub tabletu. W praktyce dostępne są dwie podobne aplikacje, przy czym jedna bezpośrednio prezentuje ten sam interfejs, który jest dostępny przez przeglądarkę internetową.

Rysunek 11. Aplikacja mobilna Volumio

Rysunek 12. Dodatkowa aplikacja mobilna Sound@home

Druga z nich (rysunek 12) teoretycznie pozwala na skonfigurowanie wielu różnych systemów Volumio w jednym domu, umożliwiając sterowanie muzyką w różnych pokojach, ale w rzeczywistości działała wątpliwie, wieszając się co jakiś czas.

Podsumowanie

Opisany projekt można samodzielnie zmodyfikować, dodając do niego obsługę pilota na podczerwień, bądź np. wbudowując Raspberry Pi do profesjonalnie wyglądającej obudowy i tworząc tym samym sprzęt audio który może być elementem zestawu hi-fi.

Warto też wspomnieć, że Volumio działa nie tylko na Raspberry Pi (zarówno w wersji 1, jak i 2), ale też na komputerach Cubox, UDOO, BeagleBone, Compulab Utilite, CubieTruck i ODROID C1. W wypadku, gdy chce się wykorzystać wbudowane wyjście audio, lub potrzebna jest wysoka wydajność, lepiej sięgnąć po inną płytkę niż Raspberry Pi.

W planach jest budowa Volumio 2, które będzie działało w oparciu o inne mechanizmy i zapewniało potencjalnie jeszcze lepszą jakość dźwięku (dzięki możliwości większego wyboru i porównywania różnych sposobów odtwarzania redukującego jitter), przy jednoczesnym mniejszym poborze mocy.

Marcin Karbowniczek, EP

Artykuł ukazał się w
Elektronika Praktyczna
styczeń 2016
DO POBRANIA
Pobierz PDF Download icon
Zobacz też
Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik lipiec 2020

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio lipiec 2020

Świat Radio

Magazyn użytkowników eteru

APA - Automatyka Podzespoły Aplikacje lipiec 2020

APA - Automatyka Podzespoły Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna lipiec 2020

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Praktyczny Kurs Elektroniki 2018

Praktyczny Kurs Elektroniki

24 pasjonujące projekty elektroniczne

Elektronika dla Wszystkich lipiec 2020

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów