La latenza è un importante parametro delle prestazioni del sistema. Sebbene esistano molti tipi di parametri di latenza audio , un parametro utile e ben compreso è la latenza di andata e ritorno , definita come il tempo impiegato da un segnale audio per entrare nell'input di un dispositivo mobile ed essere elaborato da un'app in esecuzione sull'applicazione. processore e uscire dall'output.
![Latenza audio di andata e ritorno sul dispositivo](https://source.android.com/static/docs/core/audio/images/round_trip_on_device.png?authuser=8&hl=it)
Figura 1. Latenza audio di andata e ritorno sul dispositivo: uscita T - ingresso T
Questa pagina fornisce misurazioni della latenza audio di andata e ritorno per dispositivi Nexus/Pixel selezionati e versioni della piattaforma Android.
Perché misuriamo la latenza
Google misura e segnala la latenza in modo che gli sviluppatori di applicazioni Android dispongano dei dati necessari per prendere decisioni informate sulla latenza disponibile sui dispositivi reali. Condividendo i numeri di latenza per determinati dispositivi Nexus e Pixel, speriamo di incoraggiare l'intera comunità Android a misurare, pubblicare e ridurre la latenza su tutti i dispositivi Android. Unisciti a noi nel nostro impegno per ridurre la latenza audio!
Impatto dell'app sulla latenza
L'elaborazione del segnale può aggiungere i seguenti tipi di ritardo alla latenza:
- Algoritmico . Questo ritardo è intrinseco e non varia con la CPU. Un esempio è il ritardo aggiunto da un filtro a risposta impulsiva finita (FIR).
- Computazionale . Questo ritardo è correlato al numero di cicli CPU richiesti. Ad esempio, l'attenuazione di un segnale viene solitamente eseguita mediante un'operazione di moltiplicazione che richiede un numero variabile di cicli a seconda della CPU.
Come misuriamo
Abbiamo effettuato le misurazioni elencate in questa pagina utilizzando il dongle di loopback audio del Dr. Rick O'Rang e un test di feedback audio (effetto Larsen) . Le misurazioni presuppongono che l'elaborazione del segnale dell'applicazione aggiunga un ritardo algoritmico pari a zero e un ritardo computazionale prossimo allo zero.
Misuriamo la latenza di andata e ritorno tramite il connettore dell'auricolare per diversi motivi:
![Latenza di andata e ritorno tramite connettore dell'auricolare](https://source.android.com/static/docs/core/audio/images/round_trip_via_headset_connector.png?authuser=8&hl=it)
Figura 2. Latenza di andata e ritorno tramite connettore dell'auricolare: uscita T - ingresso T
- Importanti applicazioni musicali (come la chitarra e l'elaborazione vocale) utilizzano il connettore dell'auricolare.
- Misurare la latenza di andata e ritorno del microfono e dell'altoparlante integrati nel dispositivo può essere complicato, poiché è difficile impedire che un circuito di feedback all'aria aperta entri in un'oscillazione incontrollata.
- I trasduttori integrati nel dispositivo sono piccoli e sacrificano la risposta in frequenza per raggiungere le loro dimensioni ridotte. Per compensare, viene applicata l'elaborazione del segnale digitale, ma aumenta il ritardo algoritmico per il percorso sul dispositivo.
Ci sono casi in cui le latenze del microfono e degli altoparlanti sul dispositivo sono importanti, ma di solito sono per una direzione, non andata e ritorno. Le tecniche per misurare la latenza unidirezionale sono descritte in Misurazione della latenza di output e Misurazione della latenza di input .
Misure di esempio
Le misure elencate di seguito sono specifiche per un numero di build . I dispositivi sono elencati in ordine approssimativo di rilascio iniziale e per versione della piattaforma; è inoltre possibile visualizzare le latenze in un grafico . L'applicazione di test utilizza l'API audio nativa Android basata su OpenSL ES.
Modello | piattaforma versione | Costruire numero | Frequenza di campionamento (Hz) | Dimensione buffer (cornici) | Dimensione buffer (SM) | Andata e ritorno latenza (ms) ± un tampone |
---|---|---|---|---|---|---|
Nesso Uno | 2.3.6 | GRK39F | 44100 | 768 | 17.4 | 345 |
Nesso S | 2.3.6 | GRK39F | 44100 | 1024 | 23.2 | 260 |
Nesso S | 4.0.4 | IMM76D | 44100 | 1024 | 23.2 | 260 |
Nesso S | 4.1.2 | JZO54K | 44100 | 880 | 20 | 210 |
Galassia Nexus | 4.0.1 | ITL41D | 44100 | 976 | 22.1 | 270 |
Galassia 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 |
Nesso 10 | 5.0.2 | LRX22G | 44100 | 256 | 5.8 | 36 |
Nesso 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 |
Nesso 9 | 5.0.0 | LRX21L | 48000 | 256 | 5.3 | 35 |
Nesso 9 | 5.0.1 | LRX22C | 48000 | 256 | 5.3 | 38 |
Nesso 9 | 5.1.1 | LMY47X | 48000 | 256 | 5.3 | 32 |
Nesso 9 | 6.0 | MRA58K | 48000 | 128 | 2.6 | 15 |
Nesso 6 | 5.0.1 | LRX22C | 48000 | 240 | 5 | 65 |
Nesso 6 | 5.1 | LMY47I | 48000 | 240 | 5 | 42 |
Nesso 6 | 6.0 | MRA58K | 48000 | 192 | 4 | 33 |
Nesso 5X | 6.0 | MDA89E | 48000 | 192 | 4 | 18 |
Nesso 5X | 8.0.0 | OPR4.170623.020 | 48000 | 192 | 4 | 18 |
Nesso 5X | 8.1.0 | OPM2.171019.029.C1 | 48000 | 192 | 4 | 18 |
Nesso 6P | 6.0 | MDA89D | 48000 | 192 | 4 | 18 |
Nesso 6P | 8.0.0 | OPR5.170623.014 | 48000 | 192 | 4 | 18 |
Nesso 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 |
PixelXL | 7.1.2 | NHG47L | 48000 | 192 | 4 | 18 |
PixelXL | 8.0.0 | OPR3.170623.013 | 48000 | 192 | 4 | 18 |
Figura 3. Latenza di andata e ritorno