# ChannelMappingAudioProcessor

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

*** ** * ** ***

<br />

```
@UnstableApi
public final class ChannelMappingAudioProcessor extends BaseAudioProcessor
```

<br />

|---|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object.html) |||
| ↳ | [androidx.media3.common.audio.BaseAudioProcessor](https://developer.android.com/reference/androidx/media3/common/audio/BaseAudioProcessor) ||
|   | ↳ | [androidx.media3.exoplayer.audio.ChannelMappingAudioProcessor](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. This can be used to reorder, duplicate or discard channels.

## Summary

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/audio/ChannelMappingAudioProcessor#ChannelMappingAudioProcessor()()` |

| ### Public methods |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor.AudioFormat` | `https://developer.android.com/reference/androidx/media3/exoplayer/audio/ChannelMappingAudioProcessor#onConfigure(androidx.media3.common.audio.AudioProcessor.AudioFormat)(https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor.AudioFormat inputAudioFormat)` Called when the processor is configured for a new input format. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/audio/ChannelMappingAudioProcessor#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. |
| `void` | `[setChannelMap](https://developer.android.com/reference/androidx/media3/exoplayer/audio/ChannelMappingAudioProcessor#setChannelMap(int[]))(@https://developer.android.com/reference/androidx/annotation/Nullable int[] outputChannels)` **This method is deprecated.** Use `https://developer.android.com/reference/androidx/media3/exoplayer/audio/ChannelMappingAudioProcessor#setChannelMap(com.google.common.primitives.ImmutableIntArray)` instead. <br /> |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/audio/ChannelMappingAudioProcessor#setChannelMap(com.google.common.primitives.ImmutableIntArray)(@https://developer.android.com/reference/androidx/annotation/Nullable https://guava.dev/releases/snapshot-android/api/docs/com/google/common/primitives/ImmutableIntArray.html outputChannels)` Resets the channel mapping. |

| ### Protected methods |
|---|---|
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/audio/ChannelMappingAudioProcessor#onFlush(androidx.media3.common.audio.AudioProcessor.StreamMetadata)(https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor.StreamMetadata streamMetadata)` Called when the processor is `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor#flush(androidx.media3.common.audio.AudioProcessor.StreamMetadata)`. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/audio/ChannelMappingAudioProcessor#onReset()()` Called when the processor is reset. |

### Inherited Constants

From [androidx.media3.common.audio.AudioProcessor](https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor) `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`.

### Inherited fields

From [androidx.media3.common.audio.BaseAudioProcessor](https://developer.android.com/reference/androidx/media3/common/audio/BaseAudioProcessor) `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor.AudioFormat` `https://developer.android.com/reference/androidx/media3/common/audio/BaseAudioProcessor#inputAudioFormat()`

The current input audio format.
`https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor.AudioFormat` `https://developer.android.com/reference/androidx/media3/common/audio/BaseAudioProcessor#outputAudioFormat()`

The current output audio format.

### Inherited methods

From [androidx.media3.common.audio.AudioProcessor](https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor) `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`.
From [androidx.media3.common.audio.BaseAudioProcessor](https://developer.android.com/reference/androidx/media3/common/audio/BaseAudioProcessor) `final https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor.AudioFormat` `https://developer.android.com/reference/androidx/media3/common/audio/BaseAudioProcessor#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.
`final void` `[flush](https://developer.android.com/reference/androidx/media3/common/audio/BaseAudioProcessor#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 />

`final void` `https://developer.android.com/reference/androidx/media3/common/audio/BaseAudioProcessor#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.
`https://developer.android.com/reference/java/nio/ByteBuffer.html` `@https://developer.android.com/reference/androidx/annotation/CallSuper
https://developer.android.com/reference/androidx/media3/common/audio/BaseAudioProcessor#getOutput()()`

Returns a buffer containing processed output data between its position and limit.
`final boolean` `https://developer.android.com/reference/androidx/media3/common/audio/BaseAudioProcessor#hasPendingOutput()()`

Returns whether the current output buffer has any data remaining.
`boolean` `@https://developer.android.com/reference/androidx/annotation/CallSuper
https://developer.android.com/reference/androidx/media3/common/audio/BaseAudioProcessor#isActive()()`

Returns whether the processor is configured and will process input buffers.
`boolean` `@https://developer.android.com/reference/androidx/annotation/CallSuper
https://developer.android.com/reference/androidx/media3/common/audio/BaseAudioProcessor#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.
`void` `[onFlush](https://developer.android.com/reference/androidx/media3/common/audio/BaseAudioProcessor#onFlush())()`

**This method is deprecated.**

Use `https://developer.android.com/reference/androidx/media3/common/audio/BaseAudioProcessor#onFlush(androidx.media3.common.audio.AudioProcessor.StreamMetadata)` instead.

<br />

`void` `https://developer.android.com/reference/androidx/media3/common/audio/BaseAudioProcessor#onQueueEndOfStream()()`

Called when the end-of-stream is queued to the processor.
`final void` `https://developer.android.com/reference/androidx/media3/common/audio/BaseAudioProcessor#queueEndOfStream()()`

Queues an end of stream signal.
`final https://developer.android.com/reference/java/nio/ByteBuffer.html` `https://developer.android.com/reference/androidx/media3/common/audio/BaseAudioProcessor#replaceOutputBuffer(int)(int size)`

Replaces the current output buffer with a buffer of at least `size` bytes and returns it.
`final void` `https://developer.android.com/reference/androidx/media3/common/audio/BaseAudioProcessor#reset()()`

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

## Public constructors

### ChannelMappingAudioProcessor

```
public ChannelMappingAudioProcessor()
```

## Public methods

### onConfigure

```
public AudioProcessor.AudioFormat onConfigure(AudioProcessor.AudioFormat inputAudioFormat)
```

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

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

### queueInput

```
public 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. |

### setChannelMap

```
public void [setChannelMap](https://developer.android.com/reference/androidx/media3/exoplayer/audio/ChannelMappingAudioProcessor#setChannelMap(int[]))(@Nullable int[] outputChannels)
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Use `https://developer.android.com/reference/androidx/media3/exoplayer/audio/ChannelMappingAudioProcessor#setChannelMap(com.google.common.primitives.ImmutableIntArray)` instead.

### setChannelMap

```
public void setChannelMap(@Nullable ImmutableIntArray outputChannels)
```

Resets the channel mapping. After calling this method, call `https://developer.android.com/reference/androidx/media3/common/audio/BaseAudioProcessor#configure(androidx.media3.common.audio.AudioProcessor.AudioFormat)` to start using the new channel map.

See `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink#configure(androidx.media3.exoplayer.audio.AudioSink.AudioSinkConfig)`.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://guava.dev/releases/snapshot-android/api/docs/com/google/common/primitives/ImmutableIntArray.html outputChannels` | The mapping from input to output channel indices, or `null` to leave the input unchanged. |

## Protected methods

### onFlush

```
protected void onFlush(AudioProcessor.StreamMetadata streamMetadata)
```

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

### onReset

```
protected void onReset()
```

Called when the processor is reset.