Z tego artykułu dowiesz się, jak w Androidzie przekształcać częstotliwość próbkowania, czyli przepróbkowywać. Terminologia związana z konwersją częstotliwości próbkowania – Terminologia.
Konwersja częstotliwości próbkowania to proces zmiany strumienia dyskretnych próbek z jednej częstotliwości próbkowania na inną. Konwerter częstotliwości próbkowania (resampler) to moduł, który implementuje konwersję częstotliwości próbkowania. W przypadku resamplera oryginalny strumień jest nazywany sygnałem źródłowym, a strumień po próbkowaniu – sygnałem docelowym.
Resamplery są używane w kilku miejscach w Androidzie. Plik MP3 może na przykład być zakodowany z częstotliwością próbkowania 44,1 kHz, ale musi być odtwarzany na urządzeniu z Androidem, które obsługuje dźwięk 48 kHz. W takim przypadku do przesamplingu wyjściowego dźwięku MP3 z częstotliwością próbkowania źródła 44, 1 kHz na potrzeby urządzenia z Androidem używana jest funkcja resamplingu.
Cechy próbkowania można wyrazić za pomocą wskaźników, takich jak:
- stopień zachowania ogólnej amplitudy sygnału;
- stopień zachowania pasma częstotliwości sygnału, z zastrzeżeniem ograniczeń związanych z częstotliwością próbkowania odbiornika;
- ogólny czas oczekiwania na próbkowaniu,
- spójny fazy i opóźnienia grupy w odniesieniu do częstotliwości;
- złożoność obliczeniowa wyrażona w cyklach procesora lub poborze mocy;
- dozwolone współczynniki częstotliwości próbkowania źródła i miejsca docelowego.
- możliwość dynamicznego zmieniania współczynników częstotliwości próbkowania;
- które formaty próbek cyfrowego dźwięku są obsługiwane.
Idealny resampler powinien dokładnie zachować amplitudę sygnału źródłowego i pasmo częstotliwości (z zastrzeżeniem ograniczeń odbiornika i częstotliwości próbkowania), mieć minimalne i spójne opóźnienie, minimalną złożoność obliczeniową, umożliwiać dowolne i dynamiczne współczynniki konwersji oraz obsługiwać wszystkie typowe formaty próbkowania dźwięku cyfrowego. W praktyce idealne algorytmy interpolacji nie istnieją, ponieważ rzeczywiste algorytmy są kompromisem między tymi cechami. Na przykład cele dotyczące idealnej jakości są sprzeczne z krótkim opóźnieniem i niską złożonością.
Android zawiera różne przetworniki próbkowania dźwięku, dzięki czemu można dokonać odpowiednich kompromisów w zależności od zastosowania i obciążenia aplikacji. Informacje o dostępnych narzędziach do resamplingu znajdziesz w artykule Implementacja narzędzia do resamplingu.
Implementacje resamplera
Dostępne implementacje resamplera często się zmieniają i mogą być dostosowywane przez producentów OEM. Domyślne przetworniki próbkowania w porządku malejącym zniekształcenia sygnału i rosnącej złożoności obliczeniowej to:
- jednostajne
- sześcienny
- sinc z oryginalnymi współczynnikami
- sinc z poprawionymi współczynnikami
Zasadniczo resamplery typu sinc są bardziej odpowiednie do odtwarzania muzyki o wyższej jakości, a inne resamplery powinny być zarezerwowane na potrzeby odtwarzania, w których przypadku jakość nie jest tak ważna (np. kliknięcia klawiszy lub podobne).
Wybrana implementacja resamplera zależy od przypadku użycia, obciążenia i wartości właściwości systemowej af.resampler.quality
. Szczegółowe informacje znajdziesz w źródłowym kodzie resamplera audio w AudioFlinger.