# SilenceSkippingAudioProcessor

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

*** ** * ** ***

<br />

```
@UnstableApi
public final class SilenceSkippingAudioProcessor 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.SilenceSkippingAudioProcessor](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. Input and output are 16-bit PCM.

## Summary

| ### Constants |
|---|---|
| `static final long` | `https://developer.android.com/reference/androidx/media3/exoplayer/audio/SilenceSkippingAudioProcessor#DEFAULT_MAX_SILENCE_TO_KEEP_DURATION_US() = 2000000` Default maximum silence to keep in microseconds. |
| `static final long` | `https://developer.android.com/reference/androidx/media3/exoplayer/audio/SilenceSkippingAudioProcessor#DEFAULT_MINIMUM_SILENCE_DURATION_US() = 100000` Default minimum duration of audio that must be below `silenceThresholdLevel` before silence starts being trimmed. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/audio/SilenceSkippingAudioProcessor#DEFAULT_MIN_VOLUME_TO_KEEP_PERCENTAGE() = 10` Default volume percentage to keep. |
| `static final long` | `https://developer.android.com/reference/androidx/media3/exoplayer/audio/SilenceSkippingAudioProcessor#DEFAULT_PADDING_SILENCE_US() = 20000` **This field is deprecated.** Specify silence behaviour via `silenceRetentionRatio` instead. <br /> |
| `static final float` | `https://developer.android.com/reference/androidx/media3/exoplayer/audio/SilenceSkippingAudioProcessor#DEFAULT_SILENCE_RETENTION_RATIO() = 0.2f` Default fraction of the original silence to keep. |
| `static final short` | `https://developer.android.com/reference/androidx/media3/exoplayer/audio/SilenceSkippingAudioProcessor#DEFAULT_SILENCE_THRESHOLD_LEVEL() = 1024` Default absolute level below which an individual PCM sample is classified as silent. |

| ### Public fields |
|---|---|
| `long` | `https://developer.android.com/reference/androidx/media3/exoplayer/audio/SilenceSkippingAudioProcessor#skippedFrames()` |

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/audio/SilenceSkippingAudioProcessor#SilenceSkippingAudioProcessor()()` Creates a new silence skipping audio processor. |
| `[SilenceSkippingAudioProcessor](https://developer.android.com/reference/androidx/media3/exoplayer/audio/SilenceSkippingAudioProcessor#SilenceSkippingAudioProcessor(long,long,short))( long minimumSilenceDurationUs, long paddingSilenceUs, short silenceThresholdLevel )` **This method is deprecated.** Use `https://developer.android.com/reference/androidx/media3/exoplayer/audio/SilenceSkippingAudioProcessor#SilenceSkippingAudioProcessor(long,float,long,int,short)` instead. <br /> |
| `https://developer.android.com/reference/androidx/media3/exoplayer/audio/SilenceSkippingAudioProcessor#SilenceSkippingAudioProcessor(long,float,long,int,short)( long minimumSilenceDurationUs, float silenceRetentionRatio, long maxSilenceToKeepDurationUs, int minVolumeToKeepPercentageWhenMuting, short silenceThresholdLevel )` Creates a new silence trimming audio processor. |

| ### Public methods |
|---|---|
| `long` | `https://developer.android.com/reference/androidx/media3/exoplayer/audio/SilenceSkippingAudioProcessor#getSkippedFrames()()` Returns the total number of frames of input audio that were skipped due to being classified as silence since the last call to `https://developer.android.com/reference/androidx/media3/common/audio/BaseAudioProcessor#flush()`. |
| `boolean` | `https://developer.android.com/reference/androidx/media3/exoplayer/audio/SilenceSkippingAudioProcessor#isActive()()` Returns whether the processor is configured and will process input buffers. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/audio/SilenceSkippingAudioProcessor#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/SilenceSkippingAudioProcessor#onQueueEndOfStream()()` Called when the end-of-stream is queued to the processor. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/audio/SilenceSkippingAudioProcessor#onReset()()` Called when the processor is reset. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/audio/SilenceSkippingAudioProcessor#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` | `https://developer.android.com/reference/androidx/media3/exoplayer/audio/SilenceSkippingAudioProcessor#setEnabled(boolean)(boolean enabled)` Sets whether to shorten silence in the input. |

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

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

## Constants

### DEFAULT_MAX_SILENCE_TO_KEEP_DURATION_US

```
public static final long DEFAULT_MAX_SILENCE_TO_KEEP_DURATION_US = 2000000
```

Default maximum silence to keep in microseconds. This maximum is applied after ` silenceRetentionRatio`.

### DEFAULT_MINIMUM_SILENCE_DURATION_US

```
public static final long DEFAULT_MINIMUM_SILENCE_DURATION_US = 100000
```

Default minimum duration of audio that must be below `silenceThresholdLevel` before silence starts being trimmed. Specified in microseconds.

### DEFAULT_MIN_VOLUME_TO_KEEP_PERCENTAGE

```
public static final int DEFAULT_MIN_VOLUME_TO_KEEP_PERCENTAGE = 10
```

Default volume percentage to keep.

Even when modifying the volume to a mute state, it is ideal to decrease the volume instead of making the volume zero. Completely silent audio sounds like playback has stopped. While decreased volume sounds like very light background noise at a recording studio.

### DEFAULT_PADDING_SILENCE_US

```
public static final long DEFAULT_PADDING_SILENCE_US = 20000
```

> [!CAUTION]
> **This field is deprecated.**   
>
> Specify silence behaviour via `silenceRetentionRatio` instead.

### DEFAULT_SILENCE_RETENTION_RATIO

```
public static final float DEFAULT_SILENCE_RETENTION_RATIO = 0.2f
```

Default fraction of the original silence to keep. Between \[0, 1\]. 1 means keep all silence. 0 means remove all silence.

### DEFAULT_SILENCE_THRESHOLD_LEVEL

```
public static final short DEFAULT_SILENCE_THRESHOLD_LEVEL = 1024
```

Default absolute level below which an individual PCM sample is classified as silent.

## Public fields

### skippedFrames

```
public long skippedFrames
```

## Public constructors

### SilenceSkippingAudioProcessor

```
public SilenceSkippingAudioProcessor()
```

Creates a new silence skipping audio processor.

### SilenceSkippingAudioProcessor

```
public [SilenceSkippingAudioProcessor](https://developer.android.com/reference/androidx/media3/exoplayer/audio/SilenceSkippingAudioProcessor#SilenceSkippingAudioProcessor(long,long,short))(
    long minimumSilenceDurationUs,
    long paddingSilenceUs,
    short silenceThresholdLevel
)
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Use `https://developer.android.com/reference/androidx/media3/exoplayer/audio/SilenceSkippingAudioProcessor#SilenceSkippingAudioProcessor(long,float,long,int,short)` instead.

### SilenceSkippingAudioProcessor

```
public SilenceSkippingAudioProcessor(
    long minimumSilenceDurationUs,
    float silenceRetentionRatio,
    long maxSilenceToKeepDurationUs,
    int minVolumeToKeepPercentageWhenMuting,
    short silenceThresholdLevel
)
```

Creates a new silence trimming audio processor.

| Parameters |
|---|---|
| `long minimumSilenceDurationUs` | Duration of audio that must be below ` silenceThresholdLevel` before silence starts being trimmed, in microseconds. |
| `float silenceRetentionRatio` | Fraction of the original silence to keep. Between \[0, 1\]. 1 means keep all silence. 0 means remove all silence. |
| `long maxSilenceToKeepDurationUs` | Maximum silence to keep in microseconds. This maximum is applied after `https://developer.android.com/reference/androidx/media3/exoplayer/audio/SilenceSkippingAudioProcessor#silenceRetentionRatio()`. |
| `int minVolumeToKeepPercentageWhenMuting` | Volume percentage to keep. Even when modifying the volume to a mute state, it is ideal to decrease the volume instead of making the volume zero. Completely silent audio sounds like playback has stopped. While decreased volume sounds like very light background noise from a recording studio. |
| `short silenceThresholdLevel` | Absolute level below which an individual PCM sample is classified as silent. |

## Public methods

### getSkippedFrames

```
public long getSkippedFrames()
```

Returns the total number of frames of input audio that were skipped due to being classified as silence since the last call to `https://developer.android.com/reference/androidx/media3/common/audio/BaseAudioProcessor#flush()`.

### isActive

```
public boolean isActive()
```

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

### onFlush

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

```
public void onQueueEndOfStream()
```

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

### onReset

```
public void onReset()
```

Called when the processor is reset.

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

### setEnabled

```
public void setEnabled(boolean enabled)
```

Sets whether to shorten silence in the input. This method may only be called after draining data through the processor. The value returned by `https://developer.android.com/reference/androidx/media3/exoplayer/audio/SilenceSkippingAudioProcessor#isActive()` may change, and the processor must be `https://developer.android.com/reference/androidx/media3/common/audio/BaseAudioProcessor#flush()` before queueing more data.

| Parameters |
|---|---|
| `boolean enabled` | Whether to shorten silence in the input. |

## Protected methods

### onConfigure

```
protected 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` |   |