Opóźnienie to ważny wskaźnik wydajności systemu. Istnieje wiele rodzajów opóźnień dźwięku, ale jednym z przydatnych i dobrze zrozumiałych wskaźników jest opóźnienie dwukierunkowe, czyli czas potrzebny sygnałowi audio na wejście do urządzenia mobilnego, przetworzenie przez aplikację działającą na procesorze aplikacji i wyjście z wyjścia.

Rysunek 1. Opóźnienie dźwięku w obie strony na urządzeniu: Toutput – Tinput
Na tej stronie znajdziesz pomiary opóźnienia dźwięku w obie strony na wybranych urządzeniach Nexus/Pixel i wersjach platformy Android.
Dlaczego mierzymy opóźnienie
Google mierzy i zgłasza opóźnienia, aby deweloperzy aplikacji na Androida mieli dane potrzebne do podejmowania świadomych decyzji dotyczących opóźnień na rzeczywistych urządzeniach. Udostępniając dane o opóźnieniach na wybranych urządzeniach Nexus i Pixel, chcemy zachęcić całą społeczność Androida do pomiaru, publikowania i zmniejszania opóźnień na wszystkich urządzeniach z Androidem. Dołącz do nas w poświęceniu na rzecz zmniejszenia opóźnienia dźwięku.
Wpływ aplikacji na opóźnienia
Przetwarzanie sygnału może powodować następujące rodzaje opóźnień:
- Algorytmiczny. To opóźnienie jest nieuniknione i nie zależy od procesora. Przykładem jest opóźnienie dodane przez filtr o ograniczonej odpowiedzi impulsowej (FIR).
- Komputerowy. To opóźnienie jest związane z liczbą wymaganych cykli procesora. Na przykład tłumienie sygnału jest zwykle realizowane przez operację mnożenia, która wymaga zmiennej liczby cykli w zależności od procesora.
Jak mierzymy
Pomiary wymienione na tej stronie zostały wykonane za pomocą przewodnika audio Dr. Ricka O'Ranga i testu sprzężenia dźwiękowego (efekt Larsena). Pomiary zakładają, że przetwarzanie sygnału przez aplikację nie powoduje opóźnienia algorytmicznego i prawie żadnego opóźnienia obliczeniowego.
Pomiar opóźnienia w obie strony przeprowadzamy za pomocą złącza słuchawek z kilku powodów:

Rysunek 2. Opóźnienie w obie strony przez złącze słuchawek: Toutput – Tinput
- Ważne aplikacje muzyczne (takie jak gitara i przetwarzanie głosu) korzystają z złącza słuchawek.
- Pomiar opóźnienia w obie strony mikrofonu i głośnika w urządzeniu może być uciążliwy, ponieważ trudno jest zapobiec niekontrolowanemu oscylacji w otwartej przestrzeni.
- Przetworniki na urządzeniu są małe i w celu osiągnięcia niewielkich rozmiarów rezygnują z częstotliwości. Aby to zrekompensować, stosujemy przetwarzanie cyfrowe, które zwiększa opóźnienie algorytmiczne na ścieżce na urządzeniu.
Czasy oczekiwania na sygnał z mikrofonu i głośnika mogą mieć znaczenie, ale zwykle dotyczy to tylko jednego kierunku, a nie obu. Techniki pomiaru opóźnienia jednokierunkowego opisano w artykułach Mierzenie opóźnienia wyjścia i Mierzenie opóźnienia wejścia.
Przykładowe pomiary
Podane niżej pomiary dotyczą numeru kompilacji. Urządzenia są wyświetlane w przybliżonym porządku daty premiery i wersji platformy. Możesz też wyświetlić opóźnienia na wykresie. Aplikacja testowa korzysta z natywnego interfejsu API do obsługi dźwięku na Androidzie opartego na OpenSL ES.
Model | Wersja platformy |
Numer kompilacji |
Częstotliwość próbkowania (Hz) |
Rozmiar bufora (klatki) |
Rozmiar bufora (ms) |
Czas błądzenia (ms) ± jeden bufor |
---|---|---|---|---|---|---|
Nexus One | 2.3.6 | GRK39F | 44100 | 768 | 17,4 | 345 |
Nexus S | 2.3.6 | GRK39F | 44100 | 1024 | 23,2 | 260 |
Nexus S | 4.0.4 | IMM76D | 44100 | 1024 | 23,2 | 260 |
Nexus S | 4.1.2 | JZO54K | 44100 | 880 | 20 | 210 |
Galaxy Nexus | 4.0.1 | ITL41D | 44100 | 976 | 22.1 | 270 |
Galaxy Nexus | 4,3 | JWR66Y | 44100 | 144 | 3.3 | 130 |
Nexus 4 | 4.2.2 | JDQ39E | 48000 | 240 | 5 | 195 |
Nexus 4 | 5.1 | LMY47O | 48000 | 240 | 5 | 58 |
Nexus 10 | 5.0.2 | LRX22G | 44100 | 256 | 5,8 | 36 |
Nexus 10 | 5.1 | LMY47D | 44100 | 256 | 5,8 | 35 |
Nexus 7 2013 |
4,3 | JSR78D | 48000 | 240 | 5 | 149 |
Nexus 7 2013 |
4.4 | KRT16S | 48000 | 240 | 5 | 85 |
Nexus 7 2013 |
5.0.2 | LRX22G | 48000 | 240 | 5 | 64 |
Nexus 7 2013 |
5.1 | LMY47O | 48000 | 240 | 5 | 55 |
Nexus 7 2013 |
6.0 | MRA58K | 48000 | 240 | 5 | 55 |
Nexus 5 | 4.4.4 | KTU84P | 48000 | 240 | 5 | 95 |
Nexus 5 | 5.0.0 | LRX21O | 48000 | 240 | 5 | 47 |
Nexus 5 | 5.1 | LMY47I | 48000 | 240 | 5 | 42 |
Nexus 5 | 6.0 | MRA58K | 48000 | 192 | 4 | 38 |
Nexus 9 | 5.0.0 | LRX21L | 48000 | 256 | 5.3 | 35 |
Nexus 9 | 5.0.1 | LRX22C | 48000 | 256 | 5.3 | 38 |
Nexus 9 | 5.1.1 | LMY47X | 48000 | 256 | 5.3 | 32 |
Nexus 9 | 6.0 | MRA58K | 48000 | 128 | 2.6 | 15 |
Nexus 6 | 5.0.1 | LRX22C | 48000 | 240 | 5 | 65 |
Nexus 6 | 5.1 | LMY47I | 48000 | 240 | 5 | 42 |
Nexus 6 | 6.0 | MRA58K | 48000 | 192 | 4 | 33 |
Nexus 5X | 6.0 | MDA89E | 48000 | 192 | 4 | 18 |
Nexus 5X | 8.0.0 | OPR4.170623.020 | 48000 | 192 | 4 | 18 |
Nexus 5X | 8.1.0 | OPM2.171019.029.C1 | 48000 | 192 | 4 | 18 |
Nexus 6P | 6.0 | MDA89D | 48000 | 192 | 4 | 18 |
Nexus 6P | 8.0.0 | OPR5.170623.014 | 48000 | 192 | 4 | 18 |
Nexus 6P | 8.1.0 | OPM5.171019.019 | 48000 | 192 | 4 | 18 |
Pixel | 7.1.2 | NHG47L | 48000 | 192 | 4 | 18 |
Pixel | 8.0.0 | OPR3.170623.013 | 48000 | 192 | 4 | 18 |
Pixel | 8.1.0 | OPM1.171019.021 | 48000 | 192 | 4 | 18 |
Pixel XL | 7.1.2 | NHG47L | 48000 | 192 | 4 | 18 |
Pixel XL | 8.0.0 | OPR3.170623.013 | 48000 | 192 | 4 | 18 |
Rysunek 3. Czasy oczekiwania w obie strony