Opóźnienie jest ważnym wskaźnikiem wydajności systemu. Chociaż istnieje wiele rodzajów wskaźników opóźnienia dźwięku , jednym z przydatnych i dobrze rozumianych wskaźników jest opóźnienie w obie strony , definiowane jako czas potrzebny, aby sygnał audio dostał się na wejście urządzenia mobilnego i został przetworzony przez aplikację działającą w aplikacji procesor i wyjdź z wyjścia.
![Opóźnienie dźwięku w obie strony na urządzeniu](https://source.android.com/static/docs/core/audio/images/round_trip_on_device.png?authuser=0000&hl=pl)
Rysunek 1. Opóźnienie dźwięku w obie strony na urządzeniu: wyjście T – wejście T
Na tej stronie znajdują się pomiary opóźnienia dźwięku w obie strony dla wybranych urządzeń Nexus/Pixel i wersji platformy Android.
Dlaczego mierzymy opóźnienia
Google mierzy i raportuje opóźnienia, dzięki czemu programiści aplikacji na Androida mają dane potrzebne do podejmowania świadomych decyzji dotyczących dostępnych opóźnień na rzeczywistych urządzeniach. Mamy nadzieję, że udostępniając dane dotyczące opóźnień dla wybranych urządzeń Nexus i Pixel, zachęcimy całą społeczność Androida do mierzenia, publikowania i zmniejszania opóźnień na wszystkich urządzeniach z Androidem. Dołącz do nas w naszym zaangażowaniu w redukcję opóźnień dźwięku!
Wpływ aplikacji na opóźnienia
Przetwarzanie sygnału może dodać następujące typy opóźnienia do opóźnienia:
- Algorytmiczny . Opóźnienie to jest nieodłączne i nie zależy od procesora. Przykładem jest opóźnienie dodane przez filtr o skończonej odpowiedzi impulsowej (FIR).
- Obliczeniowe . Opóźnienie to jest związane z liczbą wymaganych cykli procesora. Na przykład tłumienie sygnału zwykle odbywa się poprzez operację mnożenia, która zajmuje różną liczbę cykli w zależności od procesora.
Jak mierzymy
Pomiary wymienione na tej stronie wykonaliśmy przy użyciu klucza sprzętowego pętli zwrotnej audio Dr. Ricka O'Ranga i testu sprzężenia zwrotnego audio (efektu Larsena) . Pomiary zakładają, że przetwarzanie sygnału aplikacji dodaje zerowe opóźnienie algorytmiczne i prawie zerowe opóźnienie obliczeniowe.
Mierzymy opóźnienia w obie strony za pośrednictwem złącza zestawu słuchawkowego z kilku powodów:
![Opóźnienie w obie strony przez złącze zestawu słuchawkowego](https://source.android.com/static/docs/core/audio/images/round_trip_via_headset_connector.png?authuser=0000&hl=pl)
Rysunek 2. Opóźnienie w obie strony przez złącze zestawu słuchawkowego: wyjście T - wejście T
- Ważne aplikacje muzyczne (takie jak przetwarzanie głosu i gitary) korzystają ze złącza zestawu słuchawkowego.
- Pomiar opóźnienia mikrofonu i głośnika w urządzeniu może być uciążliwy, ponieważ trudno jest zapobiec niekontrolowanym oscylacjom w pętli sprzężenia zwrotnego na otwartej przestrzeni.
- Przetworniki wbudowane w urządzenie są małe i poświęcają pasmo przenoszenia, aby osiągnąć swój mały rozmiar. Aby to zrekompensować, stosowane jest cyfrowe przetwarzanie sygnału, ale zwiększa się opóźnienie algorytmiczne ścieżki w urządzeniu.
W niektórych przypadkach opóźnienia mikrofonu i głośnika na urządzeniu mają znaczenie, ale zwykle dotyczą one jednego kierunku, a nie ruchu w obie strony. Techniki pomiaru opóźnienia jednokierunkowego opisano w rozdziałach Pomiar opóźnienia wyjściowego i Pomiar opóźnienia wejściowego .
Przykładowe pomiary
Pomiary wymienione poniżej dotyczą konkretnego numeru kompilacji . Urządzenia są wymienione w przybliżonej kolejności według wersji początkowej i wersji platformy; możesz także zobaczyć opóźnienia na wykresie . Aplikacja testowa korzysta z natywnego API audio Androida opartego na OpenSL ES.
Model | Platforma wersja | Zbudować numer | Próbna stawka (Hz) | Rozmiar bufora (ramki) | Rozmiar bufora (SM) | Podróż w obie strony opóźnienie (ms) ± jeden bufor |
---|---|---|---|---|---|---|
Nexus Jeden | 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 |
Galaktyczny Nexus | 4.0.1 | ITL41D | 44100 | 976 | 22.1 | 270 |
Galaktyczny 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 |
Nexusa 10 | 5.0.2 | LRX22G | 44100 | 256 | 5.8 | 36 |
Nexusa 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 |
Nexusa 9 | 5.0.0 | LRX21L | 48000 | 256 | 5.3 | 35 |
Nexusa 9 | 5.0.1 | LRX22C | 48000 | 256 | 5.3 | 38 |
Nexusa 9 | 5.1.1 | LMY47X | 48000 | 256 | 5.3 | 32 |
Nexusa 9 | 6,0 | MRA58K | 48000 | 128 | 2.6 | 15 |
Nexusa 6 | 5.0.1 | LRX22C | 48000 | 240 | 5 | 65 |
Nexusa 6 | 5.1 | LMY47I | 48000 | 240 | 5 | 42 |
Nexusa 6 | 6,0 | MRA58K | 48000 | 192 | 4 | 33 |
Nexusa 5X | 6,0 | MDA89E | 48000 | 192 | 4 | 18 |
Nexusa 5X | 8.0.0 | OPR4.170623.020 | 48000 | 192 | 4 | 18 |
Nexusa 5X | 8.1.0 | OPM2.171019.029.C1 | 48000 | 192 | 4 | 18 |
Nexusa 6P | 6,0 | MDA89D | 48000 | 192 | 4 | 18 |
Nexusa 6P | 8.0.0 | OPR5.170623.014 | 48000 | 192 | 4 | 18 |
Nexusa 6P | 8.1.0 | OPM5.171019.019 | 48000 | 192 | 4 | 18 |
Piksel | 7.1.2 | NHG47L | 48000 | 192 | 4 | 18 |
Piksel | 8.0.0 | OPR3.170623.013 | 48000 | 192 | 4 | 18 |
Piksel | 8.1.0 | OPM1.171019.021 | 48000 | 192 | 4 | 18 |
Piksel XL | 7.1.2 | NHG47L | 48000 | 192 | 4 | 18 |
Piksel XL | 8.0.0 | OPR3.170623.013 | 48000 | 192 | 4 | 18 |
Rysunek 3. Opóźnienia w obie strony