# TeeAudioProcessor

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

*** ** * ** ***


```
@UnstableApi
public final class TeeAudioProcessor 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.TeeAudioProcessor](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. This is intended to be used for diagnostics and debugging.

This audio processor can be inserted into the audio processor chain to access audio data before/after particular processing steps have been applied. For example, to get audio output after playback speed adjustment and silence skipping have been applied it is necessary to pass a custom `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessorChain` when creating the audio sink, and include this audio processor after all other audio processors.

## Summary

| ### Nested types |
|---|
| `public interface https://developer.android.com/reference/androidx/media3/exoplayer/audio/TeeAudioProcessor.AudioBufferSink` A sink for audio buffers handled by the audio processor. |
| `public final class https://developer.android.com/reference/androidx/media3/exoplayer/audio/TeeAudioProcessor.WavFileAudioBufferSink implements https://developer.android.com/reference/androidx/media3/exoplayer/audio/TeeAudioProcessor.AudioBufferSink` A sink for audio buffers that writes output audio as .wav files with a given path prefix. |

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/audio/TeeAudioProcessor#TeeAudioProcessor(androidx.media3.exoplayer.audio.TeeAudioProcessor.AudioBufferSink)(https://developer.android.com/reference/androidx/media3/exoplayer/audio/TeeAudioProcessor.AudioBufferSink audioBufferSink)` Creates a new tee audio processor, sending incoming data to the given `https://developer.android.com/reference/androidx/media3/exoplayer/audio/TeeAudioProcessor.AudioBufferSink`. |

| ### Public methods |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor.AudioFormat` | `https://developer.android.com/reference/androidx/media3/exoplayer/audio/TeeAudioProcessor#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/TeeAudioProcessor#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. |

| ### Protected methods |
|---|---|
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/audio/TeeAudioProcessor#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/TeeAudioProcessor#onQueueEndOfStream()()` Called when the end-of-stream is queued to the processor. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/audio/TeeAudioProcessor#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 /> | | `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

### TeeAudioProcessor

```
public TeeAudioProcessor(TeeAudioProcessor.AudioBufferSink audioBufferSink)
```

Creates a new tee audio processor, sending incoming data to the given `https://developer.android.com/reference/androidx/media3/exoplayer/audio/TeeAudioProcessor.AudioBufferSink`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/audio/TeeAudioProcessor.AudioBufferSink audioBufferSink` | The audio buffer sink that will receive input queued to this audio processor. |

## Public methods

### onConfigure

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

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

### 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. |

## 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)`.

### onQueueEndOfStream

```
protected void onQueueEndOfStream()
```

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

### onReset

```
protected void onReset()
```

Called when the processor is reset.