@UnstableApi
public final class AacUtil


Utility methods for handling AAC audio streams.

Summary

Nested types

@Documented
@Retention(value = RetentionPolicy.SOURCE)
@Target(value = TYPE_USE)
@IntDef(value = )
public annotation AacUtil.AacAudioObjectType

Valid AAC Audio object types.

public final class AacUtil.Config

Holds sample format information for AAC audio.

Constants

static final int

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

static final int

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

static final int

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

static final int

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

static final int

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

static final int

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

static final int

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

static final int

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

static final int

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

static final int
static final int
static final int
static final int
static final int
static final int

Public methods

static byte[]
buildAacLcAudioSpecificConfig(int sampleRate, int channelCount)

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

static byte[]
buildAudioSpecificConfig(
    int audioObjectType,
    int sampleRateIndex,
    int channelConfig
)

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

static AacUtil.Config
parseAudioSpecificConfig(byte[] audioSpecificConfig)

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

static AacUtil.Config
parseAudioSpecificConfig(
    ParsableBitArray bitArray,
    boolean forceReadToEnd
)

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

Constants

AAC_ELD_MAX_RATE_BYTES_PER_SECOND

public static final int AAC_ELD_MAX_RATE_BYTES_PER_SECOND = 8000

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

public static final int AAC_HE_AUDIO_SAMPLE_COUNT = 2048

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

public static final int AAC_HE_V1_MAX_RATE_BYTES_PER_SECOND = 16000

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

AAC_HE_V2_MAX_RATE_BYTES_PER_SECOND

public static final int AAC_HE_V2_MAX_RATE_BYTES_PER_SECOND = 7000

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

AAC_LC_AUDIO_SAMPLE_COUNT

public static final int AAC_LC_AUDIO_SAMPLE_COUNT = 1024

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

AAC_LC_MAX_RATE_BYTES_PER_SECOND

public static final int AAC_LC_MAX_RATE_BYTES_PER_SECOND = 100000

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

AAC_LD_AUDIO_SAMPLE_COUNT

public static final int AAC_LD_AUDIO_SAMPLE_COUNT = 512

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

AAC_XHE_AUDIO_SAMPLE_COUNT

public static final int AAC_XHE_AUDIO_SAMPLE_COUNT = 1024

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

AAC_XHE_MAX_RATE_BYTES_PER_SECOND

public static final int AAC_XHE_MAX_RATE_BYTES_PER_SECOND = 256000

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

public static final int AUDIO_OBJECT_TYPE_AAC_ELD = 23

AUDIO_OBJECT_TYPE_AAC_ER_BSAC

public static final int AUDIO_OBJECT_TYPE_AAC_ER_BSAC = 22

AUDIO_OBJECT_TYPE_AAC_LC

public static final int AUDIO_OBJECT_TYPE_AAC_LC = 2

AUDIO_OBJECT_TYPE_AAC_PS

public static final int AUDIO_OBJECT_TYPE_AAC_PS = 29

AUDIO_OBJECT_TYPE_AAC_SBR

public static final int AUDIO_OBJECT_TYPE_AAC_SBR = 5

AUDIO_OBJECT_TYPE_AAC_XHE

public static final int AUDIO_OBJECT_TYPE_AAC_XHE = 42

Public methods

buildAacLcAudioSpecificConfig

public static byte[] buildAacLcAudioSpecificConfig(int sampleRate, int channelCount)

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

Parameters
int sampleRate

The sample rate in Hz.

int channelCount

The channel count.

Returns
byte[]

The AudioSpecificConfig.

buildAudioSpecificConfig

public static byte[] buildAudioSpecificConfig(
    int audioObjectType,
    int sampleRateIndex,
    int channelConfig
)

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

Parameters
int audioObjectType

The audio object type.

int sampleRateIndex

The sample rate index.

int channelConfig

The channel configuration.

Returns
byte[]

The AudioSpecificConfig.

parseAudioSpecificConfig

public static AacUtil.Config parseAudioSpecificConfig(byte[] audioSpecificConfig)

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

Parameters
byte[] audioSpecificConfig

A byte array containing the AudioSpecificConfig to parse.

Returns
AacUtil.Config

The parsed configuration.

Throws
androidx.media3.common.ParserException

If the AudioSpecificConfig cannot be parsed because it is invalid or unsupported.

parseAudioSpecificConfig

public static AacUtil.Config parseAudioSpecificConfig(
    ParsableBitArray bitArray,
    boolean forceReadToEnd
)

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

Parameters
ParsableBitArray bitArray

A ParsableBitArray containing the AudioSpecificConfig to parse. The position is advanced to the end of the AudioSpecificConfig.

boolean forceReadToEnd

Whether the entire AudioSpecificConfig should be read. Required for knowing the length of the configuration payload.

Returns
AacUtil.Config

The parsed configuration.

Throws
androidx.media3.common.ParserException

If the AudioSpecificConfig cannot be parsed because it is invalid or unsupported.