# AudioProcessor

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/AudioProcessor.java+class:androidx.media3.common.audio.AudioProcessor)

*** ** * ** ***


```
@UnstableApi
public interface AudioProcessor
```

<br />

Known direct subclasses [BaseAudioProcessor](https://developer.android.com/reference/androidx/media3/common/audio/BaseAudioProcessor), [SonicAudioProcessor](https://developer.android.com/reference/androidx/media3/common/audio/SonicAudioProcessor), [SpeedChangingAudioProcessor](https://developer.android.com/reference/androidx/media3/common/audio/SpeedChangingAudioProcessor)

|---|---|
| `https://developer.android.com/reference/androidx/media3/common/audio/BaseAudioProcessor` | Base class for audio processors that keep an output buffer and an internal buffer that is reused whenever input is queued. |
| `https://developer.android.com/reference/androidx/media3/common/audio/SonicAudioProcessor` | An `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor` that uses the Sonic library to modify audio speed/pitch/sample rate. |
| `https://developer.android.com/reference/androidx/media3/common/audio/SpeedChangingAudioProcessor` | An `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor` that changes the speed of audio samples depending on their timestamp. |

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

|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/audio/ChannelMappingAudioProcessor` | An `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor` that applies a mapping from input channels onto specified output channels. |
| `https://developer.android.com/reference/androidx/media3/common/audio/ChannelMixingAudioProcessor` | An `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor` that handles mixing and scaling audio channels. |
| `https://developer.android.com/reference/androidx/media3/common/audio/GainProcessor` | Applies `https://developer.android.com/reference/androidx/media3/common/audio/GainProcessor.GainProvider` over an audio stream. |
| `https://developer.android.com/reference/androidx/media3/test/utils/PassthroughAudioProcessor` | A `https://developer.android.com/reference/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/androidx/media3/exoplayer/audio/SilenceSkippingAudioProcessor` | An `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor` that skips silence in the input stream. |
| `https://developer.android.com/reference/androidx/media3/effect/playservices/StudioSoundAudioProcessor` | `https://developer.android.com/reference/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/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/androidx/media3/exoplayer/audio/ToFloatPcmAudioProcessor` | An `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor` that converts different PCM audio encodings to 32-bit float. |
| `https://developer.android.com/reference/androidx/media3/common/audio/ToInt16PcmAudioProcessor` | An `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor` that converts different PCM audio encodings to 16-bit integer PCM. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/audio/TrimmingAudioProcessor` | Audio processor for trimming samples from the start/end of data. |

*** ** * ** ***

Interface for audio processors, which take audio data as input and transform it, potentially modifying its channel count, encoding and/or sample rate.

In addition to being able to modify the format of audio, implementations may allow parameters to be set that affect the output audio and whether the processor is active/inactive.

## Summary

| ### Nested types |
|---|
| `public final class https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor.AudioFormat` PCM audio format that may be handled by an audio processor. |
| `public final class https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor.StreamMetadata` Record class that holds information about the underlying stream being processed by an `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor` |
| `public final class https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor.StreamMetadata.Builder` A builder for `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor.StreamMetadata`. |
| `public final class https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor.UnhandledAudioFormatException extends https://developer.android.com/reference/java/lang/Exception.html` Exception thrown when the given `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor.AudioFormat` can not be handled. |

| ### Constants |
|---|---|
| `default static final https://developer.android.com/reference/java/nio/ByteBuffer.html` | `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor#EMPTY_BUFFER()` An empty, direct `https://developer.android.com/reference/java/nio/ByteBuffer.html`. |

| ### Public methods |
|---|---|
| `abstract https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor.AudioFormat` | `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor#configure(androidx.media3.common.audio.AudioProcessor.AudioFormat)(https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor.AudioFormat inputAudioFormat)` Configures the processor to process input audio with the specified format. |
| `default void` | `[flush](https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor#flush())()` **This method is deprecated.** Use `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor#flush(androidx.media3.common.audio.AudioProcessor.StreamMetadata)` instead. <br /> |
| `default void` | `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor#flush(androidx.media3.common.audio.AudioProcessor.StreamMetadata)(https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor.StreamMetadata streamMetadata)` Prepares the audio processor to receive a new stream of input in the last `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor#configure(androidx.media3.common.audio.AudioProcessor.AudioFormat)` and clears any buffered data and pending output. |
| `default long` | `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor#getDurationAfterProcessorApplied(long)(long durationUs)` Returns the expected duration of the output stream when the processor is applied given a input `durationUs`. |
| `abstract https://developer.android.com/reference/java/nio/ByteBuffer.html` | `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor#getOutput()()` Returns a buffer containing processed output data between its position and limit. |
| `abstract boolean` | `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor#isActive()()` Returns whether the processor is configured and will process input buffers. |
| `abstract boolean` | `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor#isEnded()()` Returns whether this processor will return no more output from `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor#getOutput()` until `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor#flush()` has been called and more input has been queued. |
| `abstract void` | `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor#queueEndOfStream()()` Queues an end of stream signal. |
| `abstract void` | `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor#queueInput(java.nio.ByteBuffer)(https://developer.android.com/reference/java/nio/ByteBuffer.html inputBuffer)` Queues audio data between the position and limit of the `inputBuffer` for processing. |
| `abstract void` | `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor#reset()()` Resets the processor to its unconfigured state, releasing any resources. |

## Constants

### EMPTY_BUFFER

```
default static final ByteBuffer EMPTY_BUFFER
```

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

## Public methods

### configure

```
abstract AudioProcessor.AudioFormat configure(AudioProcessor.AudioFormat inputAudioFormat)
```

Configures the processor to process input audio with the specified format. After calling this method, call `https://developer.android.com/reference/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/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/androidx/media3/common/audio/AudioProcessor#queueEndOfStream()` when no more input will be supplied in the old input format.

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

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

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

### flush

```
default void [flush](https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor#flush())()
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Use `https://developer.android.com/reference/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

```
default void flush(AudioProcessor.StreamMetadata streamMetadata)
```

Prepares the audio processor to receive a new stream of input in the last `https://developer.android.com/reference/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/androidx/media3/common/audio/AudioProcessor#isActive()`.

### getDurationAfterProcessorApplied

```
default long getDurationAfterProcessorApplied(long durationUs)
```

Returns the expected duration of the output stream when the processor is applied given a input `durationUs`.

This method assumes `durationUs` of input is applied from the beginning of the stream (i.e. after a `flush(StreamMetadata.DEFAULT)` call).

### getOutput

```
abstract ByteBuffer getOutput()
```

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

```
abstract boolean isActive()
```

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

### isEnded

```
abstract boolean isEnded()
```

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

### queueEndOfStream

```
abstract void queueEndOfStream()
```

Queues an end of stream signal. After this method has been called, `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor#queueInput(java.nio.ByteBuffer)` may not be called until after the next call to `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor#flush()`. Calling `https://developer.android.com/reference/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/androidx/media3/common/audio/AudioProcessor#isEnded()` will return `true` once all remaining output data has been read.

### queueInput

```
abstract void queueInput(ByteBuffer inputBuffer)
```

Queues audio data between the position and limit of the `inputBuffer` for processing. After calling this method, processed output may be available via `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor#getOutput()`. Calling `queueInput(ByteBuffer)` again invalidates any pending output.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/nio/ByteBuffer.html inputBuffer` | The input buffer to process. It must be a direct byte buffer with native byte order. Its contents are treated as read-only. Its position will be advanced by the number of bytes consumed (which may be zero). The caller retains ownership of the provided buffer. |

### reset

```
abstract void reset()
```

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