# BaseAudioProcessor

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

*** ** * ** ***


```
@UnstableApi
abstract class BaseAudioProcessor : AudioProcessor
```

<br />

Known direct subclasses [ChannelMappingAudioProcessor](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/audio/ChannelMappingAudioProcessor), [ChannelMixingAudioProcessor](https://developer.android.com/reference/kotlin/androidx/media3/common/audio/ChannelMixingAudioProcessor), [GainProcessor](https://developer.android.com/reference/kotlin/androidx/media3/common/audio/GainProcessor), [PassthroughAudioProcessor](https://developer.android.com/reference/kotlin/androidx/media3/test/utils/PassthroughAudioProcessor), [SilenceSkippingAudioProcessor](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/audio/SilenceSkippingAudioProcessor), [StudioSoundAudioProcessor](https://developer.android.com/reference/kotlin/androidx/media3/effect/playservices/StudioSoundAudioProcessor), [TeeAudioProcessor](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/audio/TeeAudioProcessor), [ToFloatPcmAudioProcessor](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/audio/ToFloatPcmAudioProcessor), [ToInt16PcmAudioProcessor](https://developer.android.com/reference/kotlin/androidx/media3/common/audio/ToInt16PcmAudioProcessor), [TrimmingAudioProcessor](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/audio/TrimmingAudioProcessor)

|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/audio/ChannelMappingAudioProcessor` | An `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor` that applies a mapping from input channels onto specified output channels. |
| `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/ChannelMixingAudioProcessor` | An `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor` that handles mixing and scaling audio channels. |
| `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/GainProcessor` | Applies `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/GainProcessor.GainProvider` over an audio stream. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/PassthroughAudioProcessor` | A `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor` implementation that accepts all input formats and copies all input buffers onto the output without modifications. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/audio/SilenceSkippingAudioProcessor` | An `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor` that skips silence in the input stream. |
| `https://developer.android.com/reference/kotlin/androidx/media3/effect/playservices/StudioSoundAudioProcessor` | `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor` implementation for audio source separation using the [StudioSound Google Play services module](https://developers.google.com/android/reference/com/google/android/gms/media/effect/studiosound/package-summary). |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/audio/TeeAudioProcessor` | Audio processor that outputs its input unmodified and also outputs its input to a given sink. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/audio/ToFloatPcmAudioProcessor` | An `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor` that converts different PCM audio encodings to 32-bit float. |
| `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/ToInt16PcmAudioProcessor` | An `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor` that converts different PCM audio encodings to 16-bit integer PCM. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/audio/TrimmingAudioProcessor` | Audio processor for trimming samples from the start/end of data. |

*** ** * ** ***

Base class for audio processors that keep an output buffer and an internal buffer that is reused whenever input is queued. Subclasses should override `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#onConfigure(androidx.media3.common.audio.AudioProcessor.AudioFormat)` to return the output audio format for the processor if it's active.

## Summary

| ### Public constructors |
|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#BaseAudioProcessor()()` |

| ### Public functions |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor.AudioFormat!` | `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#configure(androidx.media3.common.audio.AudioProcessor.AudioFormat)(inputAudioFormat: https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor.AudioFormat!)` Configures the processor to process input audio with the specified format. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `[flush](https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#flush())()` **This function is deprecated.** Use `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor#flush(androidx.media3.common.audio.AudioProcessor.StreamMetadata)` instead. <br /> |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#flush(androidx.media3.common.audio.AudioProcessor.StreamMetadata)(streamMetadata: https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor.StreamMetadata!)` Prepares the audio processor to receive a new stream of input in the last `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor#configure(androidx.media3.common.audio.AudioProcessor.AudioFormat)` and clears any buffered data and pending output. |
| `https://developer.android.com/reference/java/nio/ByteBuffer.html!` | `@https://developer.android.com/reference/kotlin/androidx/annotation/CallSuper https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#getOutput()()` Returns a buffer containing processed output data between its position and limit. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `@https://developer.android.com/reference/kotlin/androidx/annotation/CallSuper https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#isActive()()` Returns whether the processor is configured and will process input buffers. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `@https://developer.android.com/reference/kotlin/androidx/annotation/CallSuper https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#isEnded()()` Returns whether this processor will return no more output from `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor#getOutput()` until `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor#flush()` has been called and more input has been queued. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#queueEndOfStream()()` Queues an end of stream signal. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#reset()()` Resets the processor to its unconfigured state, releasing any resources. |

| ### Protected functions |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#hasPendingOutput()()` Returns whether the current output buffer has any data remaining. |
| `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor.AudioFormat!` | `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#onConfigure(androidx.media3.common.audio.AudioProcessor.AudioFormat)(inputAudioFormat: https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor.AudioFormat!)` Called when the processor is configured for a new input format. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `[onFlush](https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#onFlush())()` **This function is deprecated.** Use `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#onFlush(androidx.media3.common.audio.AudioProcessor.StreamMetadata)` instead. <br /> |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#onFlush(androidx.media3.common.audio.AudioProcessor.StreamMetadata)(streamMetadata: https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor.StreamMetadata!)` Called when the processor is `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor#flush(androidx.media3.common.audio.AudioProcessor.StreamMetadata)`. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#onQueueEndOfStream()()` Called when the end-of-stream is queued to the processor. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#onReset()()` Called when the processor is reset. |
| `https://developer.android.com/reference/java/nio/ByteBuffer.html!` | `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#replaceOutputBuffer(int)(size: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` Replaces the current output buffer with a buffer of at least `size` bytes and returns it. |

| ### Protected properties |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor.AudioFormat!` | `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#inputAudioFormat()` The current input audio format. |
| `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor.AudioFormat!` | `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#outputAudioFormat()` The current output audio format. |

### Inherited Constants

From [androidx.media3.common.audio.AudioProcessor](https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor) `const https://developer.android.com/reference/java/nio/ByteBuffer.html!` `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor#EMPTY_BUFFER()`

An empty, direct `https://developer.android.com/reference/java/nio/ByteBuffer.html`.

### Inherited functions

From [androidx.media3.common.audio.AudioProcessor](https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor) `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor#getDurationAfterProcessorApplied(long)(durationUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html)`

Returns the expected duration of the output stream when the processor is applied given a input `durationUs`.
`abstract https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor#queueInput(java.nio.ByteBuffer)(inputBuffer: https://developer.android.com/reference/java/nio/ByteBuffer.html!)`

Queues audio data between the position and limit of the `inputBuffer` for processing.

## Public constructors

### BaseAudioProcessor

```
BaseAudioProcessor()
```

## Public functions

### configure

```
fun configure(inputAudioFormat: AudioProcessor.AudioFormat!): AudioProcessor.AudioFormat!
```

Configures the processor to process input audio with the specified format. After calling this method, call `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor#isActive()` to determine whether the audio processor is active. Returns the configured output audio format if this instance is active.

After calling this method, it is necessary to `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor#flush()` the processor to apply the new configuration. Before applying the new configuration, it is safe to queue input and get output in the old input/output formats. Call `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor#queueEndOfStream()` when no more input will be supplied in the old input format.

| Parameters |
|---|---|
| `inputAudioFormat: https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor.AudioFormat!` | The format of audio that will be queued after the next call to `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor#flush()`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor.AudioFormat!` | The configured output audio format if this instance is `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor#isActive()`. |

| Throws |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor.UnhandledAudioFormatException` | Thrown if the specified format can't be handled as input. |

### flush

```
fun [flush](https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#flush())(): Unit
```

> [!CAUTION]
> **This function is deprecated.**   
>
> Use `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor#flush(androidx.media3.common.audio.AudioProcessor.StreamMetadata)` instead.

Clears any buffered data and pending output. If the audio processor is active, also prepares the audio processor to receive a new stream of input in the last configured (pending) format.

This is equivalent to `flush(new StreamMetadata(C.TIME_UNSET))`.

### flush

```
fun flush(streamMetadata: AudioProcessor.StreamMetadata!): Unit
```

Prepares the audio processor to receive a new stream of input in the last `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor#configure(androidx.media3.common.audio.AudioProcessor.AudioFormat)` and clears any buffered data and pending output.

This method is a no-op if the processor is not `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor#isActive()`.

### getOutput

```
@CallSuper
fun getOutput(): ByteBuffer!
```

Returns a buffer containing processed output data between its position and limit. The buffer will always be a direct byte buffer with native byte order. Calling this method invalidates any previously returned buffer. The buffer will be empty if no output is available.

| Returns |
|---|---|
| `https://developer.android.com/reference/java/nio/ByteBuffer.html!` | A buffer containing processed output data between its position and limit. |

### isActive

```
@CallSuper
fun isActive(): Boolean
```

Returns whether the processor is configured and will process input buffers.

### isEnded

```
@CallSuper
fun isEnded(): Boolean
```

Returns whether this processor will return no more output from `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor#getOutput()` until `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor#flush()` has been called and more input has been queued.

### queueEndOfStream

```
fun queueEndOfStream(): Unit
```

Queues an end of stream signal. After this method has been called, `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor#queueInput(java.nio.ByteBuffer)` may not be called until after the next call to `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor#flush()`. Calling `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor#getOutput()` will return any remaining output data. Multiple calls may be required to read all of the remaining output data. `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor#isEnded()` will return `true` once all remaining output data has been read.

### reset

```
fun reset(): Unit
```

Resets the processor to its unconfigured state, releasing any resources.

## Protected functions

### hasPendingOutput

```
protected fun hasPendingOutput(): Boolean
```

Returns whether the current output buffer has any data remaining.

### onConfigure

```
protected fun onConfigure(inputAudioFormat: AudioProcessor.AudioFormat!): AudioProcessor.AudioFormat!
```

Called when the processor is configured for a new input format.

| Throws |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor.UnhandledAudioFormatException` |   |

### onFlush

```
protected fun [onFlush](https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#onFlush())(): Unit
```

> [!CAUTION]
> **This function is deprecated.**   
>
> Use `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#onFlush(androidx.media3.common.audio.AudioProcessor.StreamMetadata)` instead.

Called when the processor is flushed.

### onFlush

```
protected fun onFlush(streamMetadata: AudioProcessor.StreamMetadata!): Unit
```

Called when the processor is `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor#flush(androidx.media3.common.audio.AudioProcessor.StreamMetadata)`.

### onQueueEndOfStream

```
protected fun onQueueEndOfStream(): Unit
```

Called when the end-of-stream is queued to the processor.

### onReset

```
protected fun onReset(): Unit
```

Called when the processor is reset.

### replaceOutputBuffer

```
protected fun replaceOutputBuffer(size: Int): ByteBuffer!
```

Replaces the current output buffer with a buffer of at least `size` bytes and returns it. Callers should write to the returned buffer then `https://developer.android.com/reference/java/nio/ByteBuffer.html#flip()` it so it can be read via `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#getOutput()`.

## Protected properties

### inputAudioFormat

```
protected val inputAudioFormat: AudioProcessor.AudioFormat!
```

The current input audio format.

### outputAudioFormat

```
protected val outputAudioFormat: AudioProcessor.AudioFormat!
```

The current output audio format.