1## 5.6\. Audio Latency 2 3Audio latency is the time delay as an audio signal passes through a system. 4Many classes of applications rely on short latencies, to achieve real-time 5sound effects. 6 7For the purposes of this section, use the following definitions: 8 9* **output latency**. The interval between when an application writes a frame 10of PCM-coded data and when the corresponding sound is presented to environment 11at an on-device transducer or signal leaves the device via a port and can be 12observed externally. 13* **cold output latency**. The output latency for the first frame, when the 14audio output system has been idle and powered down prior to the request. 15* **continuous output latency**. The output latency for subsequent frames, 16after the device is playing audio. 17* **input latency**. The interval between when a sound is presented by 18environment to device at an on-device transducer or signal enters the device via 19a port and when an application reads the corresponding frame of PCM-coded data. 20* **lost input**. The initial portion of an input signal that is unusable or 21unavailable. 22* **cold input latency**. The sum of lost input time and the input latency 23for the first frame, when the audio input system has been idle and powered down 24prior to the request. 25* **continuous input latency**. The input latency for subsequent frames, 26while the device is capturing audio. 27* **cold output jitter**. The variability among separate measurements of cold 28output latency values. 29* **cold input jitter**. The variability among separate measurements of cold 30input latency values. 31* **continuous round-trip latency**. The sum of continuous input latency plus 32continuous output latency plus one buffer period. The buffer period allows 33time for the app to process the signal and time for the app to mitigate phase 34difference between input and output streams. 35* **OpenSL ES PCM buffer queue API**. The set of PCM-related 36[OpenSL ES](https://developer.android.com/ndk/guides/audio/opensl/index.html) 37APIs within [Android NDK](https://developer.android.com/ndk/index.html). 38* **AAudio native audio API**. The set of 39[AAudio](https://developer.android.com/ndk/guides/audio/aaudio/aaudio.html) APIs 40within [Android NDK](https://developer.android.com/ndk/index.html). 41* **Timestamp**. A pair consisting of a relative frame position within a 42stream and the estimated time when that frame enters or leaves the 43audio processing pipeline on the associated endpoint. See also 44[AudioTimestamp](https://developer.android.com/reference/android/media/AudioTimestamp). 45* **glitch**. A temporary interruption or incorrect sample value in the audio signal, 46typically caused by a 47[buffer underrun](https://en.wikipedia.org/wiki/Buffer_underrun) for output, 48buffer overrun for input, or any other source of digital or analog noise. 49 50If device implementations declare `android.hardware.audio.output`, they 51MUST meet or exceed the following requirements: 52 53* [C-1-1] The output timestamp returned by 54[AudioTrack.getTimestamp](https://developer.android.com/reference/android/media/AudioTrack.html#getTimestamp(android.media.AudioTimestamp)) 55and `AAudioStream_getTimestamp` is accurate to +/- 2 ms. 56* [C-1-2] Cold output latency of 500 milliseconds or less. 57 58If device implementations declare `android.hardware.audio.output` they are 59STRONGLY RECOMMENDED to meet or exceed the following requirements: 60 61* [C-SR] Cold output latency of 100 milliseconds or less. Existing and new 62 devices that run this version of Android are VERY STRONGLY RECOMMENDED 63 to meet these requirements now. In a future platform release in 2021, we 64 will require Cold output latency of 200 ms or less as a MUST. 65* [C-SR] Continuous output latency of 45 milliseconds or less. 66* [C-SR] Minimize the cold output jitter. 67* [C-SR] The output timestamp returned by 68[AudioTrack.getTimestamp](https://developer.android.com/reference/android/media/AudioTrack.html#getTimestamp(android.media.AudioTimestamp)) 69and `AAudioStream_getTimestamp` is accurate to +/- 1 ms. 70 71If device implementations meet the above requirements, after any initial 72calibration, when using both the OpenSL ES PCM buffer queue and AAudio native audio APIs, 73for continuous output latency and cold output latency over at least one supported audio 74output device, they are: 75 76* [C-SR] STRONGLY RECOMMENDED to report low-latency audio by declaring 77 `android.hardware.audio.low_latency` feature flag. 78* [C-SR] STRONGLY RECOMMENDED to meet the requirements for low-latency 79 audio via the AAudio API. 80* [C-SR] STRONGLY RECOMMENDED to ensure that for streams that return 81 [`AAUDIO_PERFORMANCE_MODE_LOW_LATENCY`](https://developer.android.com/ndk/guides/audio/aaudio/aaudio#performance-mode) 82 from [`AAudioStream_getPerformanceMode()`](https://developer.android.com/ndk/reference/group/audio#aaudiostream_getperformancemode), 83 the value returned by [`AAudioStream_getFramesPerBurst()`](https://developer.android.com/ndk/reference/group/audio#aaudiostream_getframesperburst) 84 is less than or equal to the value returned by [`android.media.AudioManager.getProperty(String)`](https://developer.android.com/reference/android/media/AudioManager.html#getProperty%28java.lang.String%29) 85 for property key [`AudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER`](https://developer.android.com/reference/android/media/AudioManager.html#PROPERTY_OUTPUT_FRAMES_PER_BUFFER). 86 87If device implementations do not meet the requirements for low-latency audio 88via both the OpenSL ES PCM buffer queue and AAudio native audio APIs, they: 89 90* [C-2-1] MUST NOT report support for low-latency audio. 91 92If device implementations include `android.hardware.microphone`, they 93MUST meet these input audio requirements: 94 95* [C-3-1] Limit the error in input timestamps, as returned by 96[AudioRecord.getTimestamp](https://developer.android.com/reference/android/media/AudioRecord.html#getTimestamp(android.media.AudioTimestamp,%20int)) 97or `AAudioStream_getTimestamp`, to +/- 2 ms. 98"Error" here means the deviation from the correct value. 99* [C-3-2] Cold input latency of 500 milliseconds or less. 100 101If device implementations include `android.hardware.microphone`, they are 102STRONGLY RECOMMENDED to meet these input audio requirements: 103 104 * [C-SR] Cold input latency of 100 milliseconds or less. Existing and new 105 devices that run this version of Android are VERY STRONGLY RECOMMENDED 106 to meet these requirements now. In a future platform release in 2021 we 107 will require Cold input latency of 200 ms or less as a MUST. 108 * [C-SR] Continuous input latency of 30 milliseconds or less. 109 * [C-SR] Continuous round-trip latency of 50 milliseconds or less. 110 * [C-SR] Minimize the cold input jitter. 111 * [C-SR] Limit the error in input timestamps, as returned by 112[AudioRecord.getTimestamp](https://developer.android.com/reference/android/media/AudioRecord.html#getTimestamp(android.media.AudioTimestamp,%20int)) 113or `AAudioStream_getTimestamp`, to +/- 1 ms. 114