Próbkowanie audio

Od Androida 5.0 (Lollipop) do respróbplowania dźwięku resamplowanie dźwięku jest teraz całkowicie oparte na filtrach FIR pochodzących z funkcji okna sinc Kaisera. Kaiser windowed-sinc oferuje te właściwości:

  • Można je łatwo obliczyć na podstawie jego parametrów projektowych (marszej pasma zatrzymania, przepustowości przejściowej, częstotliwości odcięcia, długości filtra).
  • Jest to niemal optymalna w przypadku zmniejszenia zużycia energii pasma przesiadkowego w porównaniu z całkowitą energią.

Zapoznaj się z sekcją P.P. Vaidyanathan, Multirate Systems and Filter Banks, s. 50, aby dowiedzieć się więcej o oknie Kaisera i jego optymalnego związku z prolatem sferoidalnym systemem Windows.

Parametry projektowe są obliczane automatycznie na podstawie wewnętrznego określania jakości i pożądanych współczynników próbkowania. Na podstawie parametrów projektu generowany jest filtr windowed-sinc. W przypadku muzyki resampler w przypadku 44,1–48 kHz i odwrotnie jest generowany w wyższej jakości niż w przypadku dowolnej konwersji częstotliwości.

Ponowne próbkowanie dźwięku zwiększa jakość i szybkość, aby ją osiągnąć. Resamplerzy mogą jednak wprowadzić niewielkie ilości zmarszczeń w pasmu i aliasingu szumu harmonicznego, co może powodować pewną utratę wysokiej częstotliwości w zakresie przejściowym, dlatego unikaj ich niepotrzebnie.

Sprawdzone metody próbkowania i ponownego próbkowania

W tej sekcji opisujemy kilka sprawdzonych metod, które pomogą Ci uniknąć problemów ze współczynnikami próbkowania.

Wybierz częstotliwość próbkowania dla swojego urządzenia

Ogólnie najlepiej jest wybrać częstotliwość próbkowania, która pasuje do urządzenia, zwykle 44,1 kHz lub 48 kHz. Użycie częstotliwości próbkowania większej niż 48 kHz zwykle skutkuje pogorszeniem jakości, ponieważ do odtwarzania pliku jest konieczne użycie repróbkowanego.

Użyj prostych współczynników ponownego próbkowania (wielofazy stałe i interpolowane)

Narzędzie do ponownego próbkowania działa w jednym z tych trybów:

  • Stały tryb wielofazowy. Obliczono współczynniki filtra dla każdej polifazy.
  • Tryb polifazy interpolowanej. Współczynniki filtra dla każdej polifazy muszą być interpolowane z 2 najbliższych polifaz obliczonych wstępnie.

Resamplowanie jest najszybszym narzędziem w trybie stałej polifazy, gdy stosunek szybkości wejściowej do szybkości wyjściowej L/M (z pominięciem największego wspólnego dzielnika) ma wartość M mniejszą niż 256. Na przykład w przypadku od 44 100 do 48 000 konwersji, L = 147, M = 160.

W trybie wielofazy stałej częstotliwość próbkowania jest zablokowana i nie zmienia się. W trybie interpolacji wielofaza jest częstotliwość próbkowania w przybliżeniu. W przypadku odtwarzania na urządzeniu 48 kHz dryf próbkowania zwykle wynosi 1 próbkę w ciągu kilku godzin. Zwykle nie jest to problemem, ponieważ błąd przybliżony jest znacznie mniejszy niż błąd częstotliwości spowodowany przez wewnętrzne ogniwa kwarcowe, dryf cieplny lub zakłócenia (zwykle dziesiątki ppm).

Podczas odtwarzania na urządzeniu 48 kHz wybierz częstotliwości próbkowania o prostym współczynniku proporcji, takie jak 24 kHz (1:2) i 32 kHz (2:3), nawet jeśli w przypadku AudioTrack inne współczynniki i współczynniki próbkowania mogą być dozwolone.

Do zmiany częstotliwości próbkowania używaj próbkowania w górę zamiast w dół

Częstotliwość próbkowania można zmienić na bieżąco. Szczegółowość takiej zmiany wynika z buforowania wewnętrznego (zwykle jest to kilkaset prób), a nie na podstawie poszczególnych próbek. Tego ustawienia można używać do efektów.

Nie zmieniaj dynamicznie częstotliwości próbkowania podczas próbkowania. Przy zmianie częstotliwości próbkowania po utworzeniu ścieżki audio różnice wynoszące około 5–10% względem pierwotnej częstotliwości mogą spowodować ponowne obliczenie wartości filtra podczas próbkowania w celu zmniejszenia jego liczby (aby prawidłowo eliminować aliasowanie). Może to zużywać zasoby obliczeniowe i powodować słyszalne kliknięcie, jeśli filtr zostanie zastąpiony w czasie rzeczywistym.

Ogranicz próbkowanie do maksymalnie 6:1

Pobieranie próbek jest zwykle aktywowane w zależności od wymagań dotyczących urządzenia. Jeśli do zmniejszania próbkowanie używasz przetwornika częstotliwości próbkowania, spróbuj ograniczyć współczynnik obniżenia do nie więcej niż 6:1, aby wyeliminować aliasy (np. nie można uzyskać większej próbki mniejszej niż 48 000 do 8000). Długości filtra dostosowują się do współczynnika redukcji, ale w celu uniknięcia nadmiernego zwiększania długości filtra tracisz większą przepustowość przejścia przy wyższych współczynnikach próbkowania. Nie ma podobnych obaw związanych z aliasem w przypadku upamplingu. Pamiętaj, że niektóre elementy potoku audio mogą zapobiegać próbkowaniu w formacie innym niż 2:1.

Jeśli niepokoi Cię czas oczekiwania, nie próbuj ponownie

Ponowne próbkowanie zapobiega umieszczeniu ścieżki w ścieżce FastMixer, co oznacza, że opóźnienie występuje znacznie większe ze względu na dodatkowy, większy bufor w zwykłej ścieżce miksera. Poza tym występuje pośrednie opóźnienie związane z długością filtra w resalizatorze, choć zwykle wynosi ono nie więcej niż 1 milisekundę. Nie jest to tak duże jak w przypadku dodatkowego buforowania w przypadku zwykłego buforowania w przypadku zwykłej ścieżki miksera (zwykle 20 milisekund).

Korzystanie z dźwięku zmiennoprzecinkowego

Przedstawienie danych dźwiękowych za pomocą liczb zmiennoprzecinkowych może znacznie poprawić jakość dźwięku w aplikacjach audio o wysokiej wydajności. Liczba zmiennoprzecinkowa ma te zalety:

  • Szerszy zakres dynamiczny.
  • Stała dokładność w zakresie dynamicznym.
  • Większa przestrzeń dla uniknięcia przycinania danych podczas obliczeń pośrednich i okresów przejściowych.

Obrazy zmiennoprzecinkowe mogą poprawić jakość dźwięku, ale mają pewne wady:

  • Liczby zmiennoprzecinkowe używają więcej pamięci.
  • Operacje liczby zmiennoprzecinkowe stosują nieoczekiwane właściwości, na przykład dodawanie nie jest skojarzone.
  • W obliczeniach liczby zmiennoprzecinkowej może być czasami utrata precyzji arytmetycznej z powodu zaokrąglania lub niestabilności algorytmów liczbowych.
  • Efektywne korzystanie z liczb zmiennoprzecinkowych wymaga lepszego zrozumienia, aby uzyskać dokładne i powtarzalne wyniki.

Dawniej jednostki zmiennoprzecinkowe były często niedostępne lub powolne. Dotyczy to również słabszych i wbudowanych procesorów. Jednak obecnie procesory stosowane w nowoczesnych urządzeniach mobilnych mają sprzętowe liczby zmiennoprzecinkowe, których wydajność jest podobna (a nawet w niektórych przypadkach nawet szybsza) niż liczba całkowita. Nowoczesne procesory obsługują też SIMD (pojedyncza instrukcja, wiele danych), co może jeszcze bardziej zwiększyć wydajność.

Sprawdzone metody dotyczące obrazu zmiennoprzecinkowego

Te sprawdzone metody pomogą Ci uniknąć problemów z obliczeniami liczb zmiennoprzecinkowych:

  • W przypadku rzadkich obliczeń, na przykład obliczania współczynników filtrów, używaj liczby zmiennoprzecinkowej o podwójnej precyzji.
  • Zwróć uwagę na kolejność działań.
  • Dla wartości pośrednich deklaruj zmienne jawne.
  • Możesz swobodnie używać nawiasów.
  • Jeśli otrzymasz wynik NaN lub nieskończoność, użyj wyszukiwania binarnego, aby sprawdzić, gdzie został wprowadzony.

W przypadku dźwięku zmiennoprzecinkowego do określania formatów danych ścieżki audio jest używane kodowanie formatu audio AudioFormat.ENCODING_PCM_FLOAT podobnie jak ENCODING_PCM_16_BIT czy ENCODING_PCM_8_BIT. Odpowiednia przeciążona metoda AudioTrack.write() dostarcza dane do tablicy zmiennoprzecinkowej.

Kotlin

fun write(
        audioData: FloatArray,
        offsetInFloats: Int,
        sizeInFloats: Int,
        writeMode: Int
): Int

Java

public int write(float[] audioData,
        int offsetInFloats,
        int sizeInFloats,
        int writeMode)

Więcej informacji

Ta sekcja zawiera dodatkowe materiały na temat próbkowania i liczby zmiennoprzecinkowej.

Degustacja

Częstotliwość próbkowania

Ponowne próbkowanie

Kontrowersje w zakresie wysokiej głębi i wysokiej kHz

Liczba zmiennoprzecinkowa

Te strony w Wikipedii mogą pomóc w zrozumieniu tego rodzaju zdarzeń:

W tym artykule znajdziesz informacje o tych aspektach obiektów zmiennoprzecinkowych, które mają bezpośredni wpływ na twórców systemów komputerowych: