# AacUtil

Artifact: [androidx.media3:media3-extractor](https://developer.android.com/jetpack/androidx/releases/media3) [View Source](https://cs.android.com/search?q=file:androidx/media3/extractor/AacUtil.java+class:androidx.media3.extractor.AacUtil)

*** ** * ** ***

<br />

```
@UnstableApi
class AacUtil
```

<br />

*** ** * ** ***

Utility methods for handling AAC audio streams.

## Summary

| ### Nested types |
|---|
| `@https://developer.android.com/reference/java/lang/annotation/Documented.html @https://developer.android.com/reference/java/lang/annotation/Retention.html(value = https://developer.android.com/reference/java/lang/annotation/RetentionPolicy.html#SOURCE) @https://developer.android.com/reference/java/lang/annotation/Target.html(value = https://developer.android.com/reference/java/lang/annotation/ElementType.html#TYPE_USE) @https://developer.android.com/reference/kotlin/androidx/annotation/IntDef(value = ) annotation https://developer.android.com/reference/kotlin/androidx/media3/extractor/AacUtil.AacAudioObjectType` Valid AAC Audio object types. |
| `class https://developer.android.com/reference/kotlin/androidx/media3/extractor/AacUtil.Config` Holds sample format information for AAC audio. |

| ### Constants |
|---|---|
| `const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/extractor/AacUtil#AAC_ELD_MAX_RATE_BYTES_PER_SECOND() = 8000` Maximum rate for an AAC ELD audio stream, in bytes per second. |
| `const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/extractor/AacUtil#AAC_HE_AUDIO_SAMPLE_COUNT() = 2048` Number of raw audio samples that are produced per channel when decoding an AAC HE access unit. |
| `const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/extractor/AacUtil#AAC_HE_V1_MAX_RATE_BYTES_PER_SECOND() = 16000` Maximum rate for an AAC HE V1 audio stream, in bytes per second. |
| `const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/extractor/AacUtil#AAC_HE_V2_MAX_RATE_BYTES_PER_SECOND() = 7000` Maximum rate for an AAC HE V2 audio stream, in bytes per second. |
| `const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/extractor/AacUtil#AAC_LC_AUDIO_SAMPLE_COUNT() = 1024` Number of raw audio samples that are produced per channel when decoding an AAC LC access unit. |
| `const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/extractor/AacUtil#AAC_LC_MAX_RATE_BYTES_PER_SECOND() = 100000` Maximum rate for an AAC LC audio stream, in bytes per second. |
| `const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/extractor/AacUtil#AAC_LD_AUDIO_SAMPLE_COUNT() = 512` Number of raw audio samples that are produced per channel when decoding an AAC LD access unit. |
| `const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/extractor/AacUtil#AAC_XHE_AUDIO_SAMPLE_COUNT() = 1024` Number of raw audio samples that are produced per channel when decoding an AAC XHE access unit. |
| `const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/extractor/AacUtil#AAC_XHE_MAX_RATE_BYTES_PER_SECOND() = 256000` Maximum rate for an AAC XHE audio stream, in bytes per second. |
| `const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/extractor/AacUtil#AUDIO_OBJECT_TYPE_AAC_ELD() = 23` |
| `const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/extractor/AacUtil#AUDIO_OBJECT_TYPE_AAC_ER_BSAC() = 22` |
| `const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/extractor/AacUtil#AUDIO_OBJECT_TYPE_AAC_LC() = 2` |
| `const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/extractor/AacUtil#AUDIO_OBJECT_TYPE_AAC_PS() = 29` |
| `const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/extractor/AacUtil#AUDIO_OBJECT_TYPE_AAC_SBR() = 5` |
| `const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/extractor/AacUtil#AUDIO_OBJECT_TYPE_AAC_XHE() = 42` |

| ### Public functions |
|---|---|
| `java-static https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-array/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-byte/index.html>!` | `https://developer.android.com/reference/kotlin/androidx/media3/extractor/AacUtil#buildAacLcAudioSpecificConfig(int,int)(sampleRate: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, channelCount: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` Builds a simple AAC LC AudioSpecificConfig, as defined in ISO 14496-3 1.6.2.1 |
| `java-static https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-array/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-byte/index.html>!` | `https://developer.android.com/reference/kotlin/androidx/media3/extractor/AacUtil#buildAudioSpecificConfig(int,int,int)( audioObjectType: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, sampleRateIndex: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, channelConfig: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html )` Builds a simple AudioSpecificConfig, as defined in ISO 14496-3 1.6.2.1 |
| `java-static https://developer.android.com/reference/kotlin/androidx/media3/extractor/AacUtil.Config!` | `https://developer.android.com/reference/kotlin/androidx/media3/extractor/AacUtil#parseAudioSpecificConfig(byte[])(audioSpecificConfig: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-byte-array/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-byte/index.html>!)` Parses an AAC AudioSpecificConfig, as defined in ISO 14496-3 1.6.2.1 |
| `java-static https://developer.android.com/reference/kotlin/androidx/media3/extractor/AacUtil.Config!` | `https://developer.android.com/reference/kotlin/androidx/media3/extractor/AacUtil#parseAudioSpecificConfig(androidx.media3.common.util.ParsableBitArray,boolean)( bitArray: https://developer.android.com/reference/kotlin/androidx/media3/common/util/ParsableBitArray!, forceReadToEnd: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html )` Parses an AAC AudioSpecificConfig, as defined in ISO 14496-3 1.6.2.1 |

## Constants

### AAC_ELD_MAX_RATE_BYTES_PER_SECOND

```
const val AAC_ELD_MAX_RATE_BYTES_PER_SECOND = 8000: Int
```

Maximum rate for an AAC ELD audio stream, in bytes per second.

Fraunhofer documentation shows AAC-ELD as useful for up to \~ 64 kbit/s so we use this value.

### AAC_HE_AUDIO_SAMPLE_COUNT

```
const val AAC_HE_AUDIO_SAMPLE_COUNT = 2048: Int
```

Number of raw audio samples that are produced per channel when decoding an AAC HE access unit.

### AAC_HE_V1_MAX_RATE_BYTES_PER_SECOND

```
const val AAC_HE_V1_MAX_RATE_BYTES_PER_SECOND = 16000: Int
```

Maximum rate for an AAC HE V1 audio stream, in bytes per second.

### AAC_HE_V2_MAX_RATE_BYTES_PER_SECOND

```
const val AAC_HE_V2_MAX_RATE_BYTES_PER_SECOND = 7000: Int
```

Maximum rate for an AAC HE V2 audio stream, in bytes per second.

### AAC_LC_AUDIO_SAMPLE_COUNT

```
const val AAC_LC_AUDIO_SAMPLE_COUNT = 1024: Int
```

Number of raw audio samples that are produced per channel when decoding an AAC LC access unit.

### AAC_LC_MAX_RATE_BYTES_PER_SECOND

```
const val AAC_LC_MAX_RATE_BYTES_PER_SECOND = 100000: Int
```

Maximum rate for an AAC LC audio stream, in bytes per second.

### AAC_LD_AUDIO_SAMPLE_COUNT

```
const val AAC_LD_AUDIO_SAMPLE_COUNT = 512: Int
```

Number of raw audio samples that are produced per channel when decoding an AAC LD access unit.

### AAC_XHE_AUDIO_SAMPLE_COUNT

```
const val AAC_XHE_AUDIO_SAMPLE_COUNT = 1024: Int
```

Number of raw audio samples that are produced per channel when decoding an AAC XHE access unit.

### AAC_XHE_MAX_RATE_BYTES_PER_SECOND

```
const val AAC_XHE_MAX_RATE_BYTES_PER_SECOND = 256000: Int
```

Maximum rate for an AAC XHE audio stream, in bytes per second.

Fraunhofer documentation says "500 kbit/s and above" for stereo, so we use a rate generously above the 500 kbit/s level.

### AUDIO_OBJECT_TYPE_AAC_ELD

```
const val AUDIO_OBJECT_TYPE_AAC_ELD = 23: Int
```

### AUDIO_OBJECT_TYPE_AAC_ER_BSAC

```
const val AUDIO_OBJECT_TYPE_AAC_ER_BSAC = 22: Int
```

### AUDIO_OBJECT_TYPE_AAC_LC

```
const val AUDIO_OBJECT_TYPE_AAC_LC = 2: Int
```

### AUDIO_OBJECT_TYPE_AAC_PS

```
const val AUDIO_OBJECT_TYPE_AAC_PS = 29: Int
```

### AUDIO_OBJECT_TYPE_AAC_SBR

```
const val AUDIO_OBJECT_TYPE_AAC_SBR = 5: Int
```

### AUDIO_OBJECT_TYPE_AAC_XHE

```
const val AUDIO_OBJECT_TYPE_AAC_XHE = 42: Int
```

## Public functions

### buildAacLcAudioSpecificConfig

```
java-static fun buildAacLcAudioSpecificConfig(sampleRate: Int, channelCount: Int): Array<Byte>!
```

Builds a simple AAC LC AudioSpecificConfig, as defined in ISO 14496-3 1.6.2.1

| Parameters |
|---|---|
| `sampleRate: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The sample rate in Hz. |
| `channelCount: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The channel count. |

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-array/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-byte/index.html>!` | The AudioSpecificConfig. |

### buildAudioSpecificConfig

```
java-static fun buildAudioSpecificConfig(
    audioObjectType: Int,
    sampleRateIndex: Int,
    channelConfig: Int
): Array<Byte>!
```

Builds a simple AudioSpecificConfig, as defined in ISO 14496-3 1.6.2.1

| Parameters |
|---|---|
| `audioObjectType: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The audio object type. |
| `sampleRateIndex: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The sample rate index. |
| `channelConfig: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The channel configuration. |

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-array/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-byte/index.html>!` | The AudioSpecificConfig. |

### parseAudioSpecificConfig

```
java-static fun parseAudioSpecificConfig(audioSpecificConfig: ByteArray<Byte>!): AacUtil.Config!
```

Parses an AAC AudioSpecificConfig, as defined in ISO 14496-3 1.6.2.1

| Parameters |
|---|---|
| `audioSpecificConfig: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-byte-array/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-byte/index.html>!` | A byte array containing the AudioSpecificConfig to parse. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/extractor/AacUtil.Config!` | The parsed configuration. |

| Throws |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/common/ParserException` | If the AudioSpecificConfig cannot be parsed because it is invalid or unsupported. |

### parseAudioSpecificConfig

```
java-static fun parseAudioSpecificConfig(
    bitArray: ParsableBitArray!,
    forceReadToEnd: Boolean
): AacUtil.Config!
```

Parses an AAC AudioSpecificConfig, as defined in ISO 14496-3 1.6.2.1

| Parameters |
|---|---|
| `bitArray: https://developer.android.com/reference/kotlin/androidx/media3/common/util/ParsableBitArray!` | A `https://developer.android.com/reference/kotlin/androidx/media3/common/util/ParsableBitArray` containing the AudioSpecificConfig to parse. The position is advanced to the end of the AudioSpecificConfig. |
| `forceReadToEnd: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | Whether the entire AudioSpecificConfig should be read. Required for knowing the length of the configuration payload. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/extractor/AacUtil.Config!` | The parsed configuration. |

| Throws |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/common/ParserException` | If the AudioSpecificConfig cannot be parsed because it is invalid or unsupported. |