wersja mobilna

Audiofilski odtwarzacz muzyki z Raspberry Pi

Numer: Styczeń/2016

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.

Pobierz PDF

Ś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

Pozostałe artykuły

Stacja pogodowa na Raspberry Pi

Numer: Czerwiec/2019

Fundacja Raspbery Pi wysłała do szkół na całym świecie ponad 10 tysięcy stacji pogodowych opartych na module HAT z zestawem potrzebnych sensorów. Teraz każdy w domu może skonstruować taką stację pogodową na bazie zaproponowanych modułów z sensorami lub po prostu samodzielnie łącząc układy scalone z komputerem jednopłytkowym Raspberry Pi.

Laserowy, bezprzewodowy sensor smogu dla Raspberry Pi

Numer: Maj/2019

W jednym z poprzednich numerów zaprezentowany został projekt sensora smogu z bezprzewodową technologią Bluetooth Low Energy. Wyposażony w dokładny, laserowy czujnik PMS7003 umożliwia on wykonywanie zdalnych pomiarów zawartości pyłów zawieszonych w powietrzu. Mierzy też temperaturę i wilgotność względną, korzystając z precyzyjnego układu SHT20. Prezentację wyniku pomiaru powierzono aplikacji BBair, która na ekranie smartfonu ...

Rower elektryczny (1)

Numer: Maj/2019

Już od jakiegoś czasu stały się dosyć mocno popularne różne pojazdy z napędem elektrycznym. Na ulicach często możemy zobaczyć hulajnogę lub deskorolkę elektryczną. Tego typu pojazdy są bardzo tanie w eksploatacji oraz umożliwiają łatwe przemieszczanie się po utwardzonych nawierzchniach w większych aglomeracjach. Niestety większość małych pojazdów elektrycznych może poruszać się tylko po utwardzonych drogach, a dodatkowo ...

Strumieniowy odtwarzacz audio na i.MX6ULL

Numer: Kwiecień/2019

W systemach mikroprocesorowych często zachodzi potrzeba porozumienia się z użytkownikiem nie tylko za pomocą obrazu i dotyku, ale również za pomocą dźwięku. Nie zawsze musi to być dźwięk o najwyższej jakości, szerokiej dynamice i pozbawiony zniekształceń. Do zwrócenia uwagi użytkownika na wyświetlany na ekranie komunikat, udźwiękowienia zapisanego w pamięci urządzenia filmiku instruktażowego, odtworzenia mowy lub muzyki z niewielkich, ...

Analizator stanów logicznych z modułu STM32F4DISCOVERY

Numer: Styczeń/2019

W artykule przedstawiono kolejny przykład użycia zestawu uruchomieniowego mikrokontrolera w roli analizatora stanów logicznych. Tym razem projekt analizatora powstał na bazie zestawu STM32F4DISCOVERY. Dzięki niestandardowemu użyciu układu DCMI w mikrokontrolerze STM32F407 uzyskano analizator stanów logicznych o godnych uwagi parametrach, przewyższający swymi osiągami popularny wśród hobbystów i studentów analizator Saleae.

Mobilna
Elektronika
Praktyczna

Elektronika Praktyczna

Czerwiec 2019

PrenumerataePrenumerataKup w kiosku wysyłkowym

Elektronika Praktyczna Plus

lipiec - grudzień 2012

Kup w kiosku wysyłkowym