Added in [API level 23](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)

# Builder

*** ** * ** ***

```
open class Builder
```

|---|---|
| [kotlin.Any](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html) ||
| ↳ | [android.media.AudioTrack.Builder](https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#) |

Builder class for `https://developer.android.com/reference/kotlin/android/media/AudioTrack` objects. Use this class to configure and create an `AudioTrack` instance. By setting audio attributes and audio format parameters, you indicate which of those vary from the default behavior on the device.

Here is an example where `Builder` is used to specify all `https://developer.android.com/reference/kotlin/android/media/AudioFormat` parameters, to be used by a new `AudioTrack` instance:

```kotlin
AudioTrack player = new AudioTrack.Builder()
          .setAudioAttributes(new AudioAttributes.Builder()
                   .setUsage(AudioAttributes.USAGE_ALARM)
                   .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                   .build())
          .setAudioFormat(new AudioFormat.Builder()
                  .setEncoding(AudioFormat.ENCODING_PCM_16BIT)
                  .setSampleRate(44100)
                  .setChannelMask(AudioFormat.CHANNEL_OUT_STEREO)
                  .build())
          .setBufferSizeInBytes(minBuffSize)
          .build();
  
```

If the audio attributes are not set with `https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#setAudioAttributes(android.media.AudioAttributes)`, attributes comprising `https://developer.android.com/reference/kotlin/android/media/AudioAttributes#USAGE_MEDIA:kotlin.Int` will be used.   
If the audio format is not specified or is incomplete, its channel configuration will be `https://developer.android.com/reference/kotlin/android/media/AudioFormat#CHANNEL_OUT_STEREO:kotlin.Int` and the encoding will be `https://developer.android.com/reference/kotlin/android/media/AudioFormat#ENCODING_PCM_16BIT:kotlin.Int`. The sample rate will depend on the device actually selected for playback and can be queried with `https://developer.android.com/reference/kotlin/android/media/AudioTrack#getSampleRate()` method.   
If the buffer size is not specified with `https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#setBufferSizeInBytes(kotlin.Int)`, and the mode is `https://developer.android.com/reference/kotlin/android/media/AudioTrack#MODE_STREAM:kotlin.Int`, the minimum buffer size is used.   
If the transfer mode is not specified with `https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#setTransferMode(kotlin.Int)`, `MODE_STREAM` will be used.   
If the session ID is not specified with `https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#setSessionId(kotlin.Int)`, a new one will be generated.   
Offload is false by default.

## Summary

| Public constructors ||
|---|---|
| `https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#Builder()()` Constructs a new Builder with the default values as described above. |

| Public methods ||
|---|---|
| open [AudioTrack](https://developer.android.com/reference/kotlin/android/media/AudioTrack) | `https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#build()()` Builds an `https://developer.android.com/reference/kotlin/android/media/AudioTrack` instance initialized with all the parameters set on this `Builder`. |
| open [AudioTrack.Builder](https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#) | `https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#setAudioAttributes(android.media.AudioAttributes)(attributes: https://developer.android.com/reference/kotlin/android/media/AudioAttributes)` Sets the `https://developer.android.com/reference/kotlin/android/media/AudioAttributes`. |
| open [AudioTrack.Builder](https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#) | `https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#setAudioFormat(android.media.AudioFormat)(format: https://developer.android.com/reference/kotlin/android/media/AudioFormat)` Sets the format of the audio data to be played by the `https://developer.android.com/reference/kotlin/android/media/AudioTrack`. |
| open [AudioTrack.Builder](https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#) | `https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#setBufferSizeInBytes(kotlin.Int)(bufferSizeInBytes: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)` Sets the total size (in bytes) of the buffer where audio data is read from for playback. |
| open [AudioTrack.Builder](https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#) | `https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#setCodecProvenance(kotlin.String)(codecMediaType: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)` Sets the source codec of the audio data using a media type. |
| open [AudioTrack.Builder](https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#) | `https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#setContext(android.content.Context)(context: https://developer.android.com/reference/kotlin/android/content/Context.html#)` Sets the context the track belongs to. |
| open [AudioTrack.Builder](https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#) | `https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#setEncapsulationMode(kotlin.Int)(encapsulationMode: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)` Sets the encapsulation mode. |
| open [AudioTrack.Builder](https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#) | `https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#setOffloadedPlayback(kotlin.Boolean)(offload: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)` Sets whether this track will play through the offloaded audio path. |
| open [AudioTrack.Builder](https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#) | `https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#setPerformanceMode(kotlin.Int)(performanceMode: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)` Sets the `https://developer.android.com/reference/kotlin/android/media/AudioTrack` performance mode. |
| open [AudioTrack.Builder](https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#) | `https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#setSessionId(kotlin.Int)(sessionId: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)` Sets the session ID the `https://developer.android.com/reference/kotlin/android/media/AudioTrack` will be attached to. |
| open [AudioTrack.Builder](https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#) | `https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#setTransferMode(kotlin.Int)(mode: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)` Sets the mode under which buffers of audio data are transferred from the `https://developer.android.com/reference/kotlin/android/media/AudioTrack` to the framework. |

## Public constructors

### Builder

Added in [API level 23](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)

```
Builder()
```

Constructs a new Builder with the default values as described above.

## Public methods

### build

Added in [API level 23](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)

```
open fun build(): AudioTrack
```

Builds an `https://developer.android.com/reference/kotlin/android/media/AudioTrack` instance initialized with all the parameters set on this `Builder`.

| Return ||
|---|---|
| `https://developer.android.com/reference/kotlin/android/media/AudioTrack` | a new successfully initialized `https://developer.android.com/reference/kotlin/android/media/AudioTrack` instance. This value cannot be `null`. |

| Exceptions ||
|---|---|
| `java.lang.UnsupportedOperationException` | if the parameters set on the `Builder` were incompatible, or if they are not supported by the device, or if the device was not available. |

### setAudioAttributes

Added in [API level 23](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)

```
open fun setAudioAttributes(attributes: AudioAttributes): AudioTrack.Builder
```

Sets the `https://developer.android.com/reference/kotlin/android/media/AudioAttributes`.

| Parameters ||
|---|---|
| `attributes` | [AudioAttributes](https://developer.android.com/reference/kotlin/android/media/AudioAttributes): a non-null `https://developer.android.com/reference/kotlin/android/media/AudioAttributes` instance that describes the audio data to be played. |

| Return ||
|---|---|
| `https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#` | the same Builder instance. This value cannot be `null`. |

| Exceptions ||
|---|---|
| `java.lang.IllegalArgumentException` |   |

### setAudioFormat

Added in [API level 23](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)

```
open fun setAudioFormat(format: AudioFormat): AudioTrack.Builder
```

Sets the format of the audio data to be played by the `https://developer.android.com/reference/kotlin/android/media/AudioTrack`. See `https://developer.android.com/reference/kotlin/android/media/AudioFormat.Builder` for configuring the audio format parameters such as encoding, channel mask and sample rate.

| Parameters ||
|---|---|
| `format` | [AudioFormat](https://developer.android.com/reference/kotlin/android/media/AudioFormat): a non-null `https://developer.android.com/reference/kotlin/android/media/AudioFormat` instance. |

| Return ||
|---|---|
| `https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#` | the same Builder instance. This value cannot be `null`. |

| Exceptions ||
|---|---|
| `java.lang.IllegalArgumentException` |   |

### setBufferSizeInBytes

Added in [API level 23](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)

```
open fun setBufferSizeInBytes(bufferSizeInBytes: Int): AudioTrack.Builder
```

Sets the total size (in bytes) of the buffer where audio data is read from for playback. If using the `https://developer.android.com/reference/kotlin/android/media/AudioTrack` in streaming mode (see `https://developer.android.com/reference/kotlin/android/media/AudioTrack#MODE_STREAM:kotlin.Int`, you can write data into this buffer in smaller chunks than this size. See `https://developer.android.com/reference/kotlin/android/media/AudioTrack#getMinBufferSize(kotlin.Int,%20kotlin.Int,%20kotlin.Int)` to determine the estimated minimum buffer size for the creation of an AudioTrack instance in streaming mode.   
If using the `AudioTrack` in static mode (see `https://developer.android.com/reference/kotlin/android/media/AudioTrack#MODE_STATIC:kotlin.Int`), this is the maximum size of the sound that will be played by this instance.

| Parameters ||
|---|---|
| `bufferSizeInBytes` | [Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html): Value is 0 or greater |

| Return ||
|---|---|
| `https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#` | the same Builder instance. This value cannot be `null`. |

| Exceptions ||
|---|---|
| `java.lang.IllegalArgumentException` |   |

### setCodecProvenance

Added in [API level 37](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)

```
open fun setCodecProvenance(codecMediaType: String): AudioTrack.Builder
```

Sets the source codec of the audio data using a media type. This information may be used by the audio framework and the audio HAL for selecting the best spatial renderer. Used when the format of the audio data used for the `https://developer.android.com/reference/kotlin/android/media/AudioTrack` is different from the original codec. The values for codec media types should be provided using corresponding constants from the `https://developer.android.com/reference/kotlin/android/media/MediaFormat` class. For example, `https://developer.android.com/reference/kotlin/android/media/MediaFormat#MIMETYPE_AUDIO_EAC3_JOC:kotlin.String` may be used for audio content originating from Dolby Atmos media.

| Parameters ||
|---|---|
| `codecMediaType` | [String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html): a non-null string indicating codec type using media string |

| Return ||
|---|---|
| `https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#` | the same Builder instance. This value cannot be `null`. |

| Exceptions ||
|---|---|
| `java.lang.IllegalArgumentException` | if `codecMediaType` is null or is invalid media type string |

### setContext

Added in [API level 34](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)

```
open fun setContext(context: Context): AudioTrack.Builder
```

Sets the context the track belongs to. This context will be used to pull information, such as `https://developer.android.com/reference/kotlin/android/content/AttributionSource.html#` and device specific audio session ids, which will be associated with the `https://developer.android.com/reference/kotlin/android/media/AudioTrack`. However, the context itself will not be retained by the `https://developer.android.com/reference/kotlin/android/media/AudioTrack`.

| Parameters ||
|---|---|
| `context` | [Context](https://developer.android.com/reference/kotlin/android/content/Context.html#): a non-null `https://developer.android.com/reference/kotlin/android/content/Context.html#` instance |

| Return ||
|---|---|
| `https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#` | the same Builder instance. This value cannot be `null`. |

### setEncapsulationMode

Added in [API level 30](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)

```
open fun setEncapsulationMode(encapsulationMode: Int): AudioTrack.Builder
```

Sets the encapsulation mode. Encapsulation mode allows metadata to be sent together with the audio data payload in a `ByteBuffer`. This requires a compatible hardware audio codec.

| Parameters ||
|---|---|
| `encapsulationMode` | [Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html): one of `https://developer.android.com/reference/kotlin/android/media/AudioTrack#ENCAPSULATION_MODE_NONE:kotlin.Int`, or `https://developer.android.com/reference/kotlin/android/media/AudioTrack#ENCAPSULATION_MODE_ELEMENTARY_STREAM:kotlin.Int`. Value is one of the following: - `https://developer.android.com/reference/kotlin/android/media/AudioTrack#ENCAPSULATION_MODE_NONE:kotlin.Int` - `https://developer.android.com/reference/kotlin/android/media/AudioTrack#ENCAPSULATION_MODE_ELEMENTARY_STREAM:kotlin.Int` |

| Return ||
|---|---|
| `https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#` | the same Builder instance. This value cannot be `null`. |

### setOffloadedPlayback

Added in [API level 29](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)

```
open fun setOffloadedPlayback(offload: Boolean): AudioTrack.Builder
```

Sets whether this track will play through the offloaded audio path. When set to true, at build time, the audio format will be checked against `https://developer.android.com/reference/kotlin/android/media/AudioManager#isOffloadedPlaybackSupported(android.media.AudioFormat,%20android.media.AudioAttributes)` to verify the audio format used by this track is supported on the device's offload path (if any).   
Offload is only supported for media audio streams, and therefore requires that the usage be `https://developer.android.com/reference/kotlin/android/media/AudioAttributes#USAGE_MEDIA:kotlin.Int`.

| Parameters ||
|---|---|
| `offload` | [Boolean](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html): true to require the offload path for playback. |

| Return ||
|---|---|
| `https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#` | the same Builder instance. This value cannot be `null`. |

### setPerformanceMode

Added in [API level 26](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)

```
open fun setPerformanceMode(performanceMode: Int): AudioTrack.Builder
```

Sets the `https://developer.android.com/reference/kotlin/android/media/AudioTrack` performance mode. This is an advisory request which may not be supported by the particular device, and the framework is free to ignore such request if it is incompatible with other requests or hardware.

| Parameters ||
|---|---|
| `performanceMode` | [Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html): one of `https://developer.android.com/reference/kotlin/android/media/AudioTrack#PERFORMANCE_MODE_NONE:kotlin.Int`, `https://developer.android.com/reference/kotlin/android/media/AudioTrack#PERFORMANCE_MODE_LOW_LATENCY:kotlin.Int`, or `https://developer.android.com/reference/kotlin/android/media/AudioTrack#PERFORMANCE_MODE_POWER_SAVING:kotlin.Int`. Value is one of the following: - `https://developer.android.com/reference/kotlin/android/media/AudioTrack#PERFORMANCE_MODE_NONE:kotlin.Int` - `https://developer.android.com/reference/kotlin/android/media/AudioTrack#PERFORMANCE_MODE_LOW_LATENCY:kotlin.Int` - `https://developer.android.com/reference/kotlin/android/media/AudioTrack#PERFORMANCE_MODE_POWER_SAVING:kotlin.Int` |

| Return ||
|---|---|
| `https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#` | the same Builder instance. This value cannot be `null`. |

| Exceptions ||
|---|---|
| `java.lang.IllegalArgumentException` | if `performanceMode` is not valid. |

### setSessionId

Added in [API level 23](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)

```
open fun setSessionId(sessionId: Int): AudioTrack.Builder
```

Sets the session ID the `https://developer.android.com/reference/kotlin/android/media/AudioTrack` will be attached to. Note, that if there's a device specific session id asociated with the context, explicitly setting a session id using this method will override it (see `https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#setContext(android.content.Context)`).

| Parameters ||
|---|---|
| `sessionId` | [Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html): a strictly positive ID number retrieved from another `AudioTrack` via `https://developer.android.com/reference/kotlin/android/media/AudioTrack#getAudioSessionId()` or allocated by `https://developer.android.com/reference/kotlin/android/media/AudioManager` via `https://developer.android.com/reference/kotlin/android/media/AudioManager#generateAudioSessionId()`, or `https://developer.android.com/reference/kotlin/android/media/AudioManager#AUDIO_SESSION_ID_GENERATE:kotlin.Int`. Value is 1 or greater |

| Return ||
|---|---|
| `https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#` | the same Builder instance. This value cannot be `null`. |

| Exceptions ||
|---|---|
| `java.lang.IllegalArgumentException` |   |

### setTransferMode

Added in [API level 23](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)

```
open fun setTransferMode(mode: Int): AudioTrack.Builder
```

Sets the mode under which buffers of audio data are transferred from the `https://developer.android.com/reference/kotlin/android/media/AudioTrack` to the framework.

| Parameters ||
|---|---|
| `mode` | [Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html): one of `https://developer.android.com/reference/kotlin/android/media/AudioTrack#MODE_STREAM:kotlin.Int`, `https://developer.android.com/reference/kotlin/android/media/AudioTrack#MODE_STATIC:kotlin.Int`. Value is one of the following: - `https://developer.android.com/reference/kotlin/android/media/AudioTrack#MODE_STATIC:kotlin.Int` - `https://developer.android.com/reference/kotlin/android/media/AudioTrack#MODE_STREAM:kotlin.Int` |

| Return ||
|---|---|
| `https://developer.android.com/reference/kotlin/android/media/AudioTrack.Builder#` | the same Builder instance. This value cannot be `null`. |

| Exceptions ||
|---|---|
| `java.lang.IllegalArgumentException` |   |