SilenceSkippingAudioProcessor


@UnstableApi
public final class SilenceSkippingAudioProcessor extends BaseAudioProcessor


An AudioProcessor that skips silence in the input stream. Input and output are 16-bit PCM.

Summary

Constants

static final long

Default maximum silence to keep in microseconds.

static final long

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

static final int

Default volume percentage to keep.

static final long

This field is deprecated.

Specify silence behaviour via silenceRetentionRatio instead.

static final float

Default fraction of the original silence to keep.

static final short

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

Public fields

long

Public constructors

Creates a new silence skipping audio processor.

SilenceSkippingAudioProcessor(
    long minimumSilenceDurationUs,
    long paddingSilenceUs,
    short silenceThresholdLevel
)

This method is deprecated.

Use SilenceSkippingAudioProcessor instead.

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

Creates a new silence trimming audio processor.

Public methods

long

Returns the total number of frames of input audio that were skipped due to being classified as silence since the last call to flush.

boolean

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

void

Called when the processor is flushed, directly or as part of resetting.

void

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

void

Called when the processor is reset.

void
queueInput(ByteBuffer inputBuffer)

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

void
setEnabled(boolean enabled)

Sets whether to shorten silence in the input.

Protected methods

AudioProcessor.AudioFormat

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

Inherited Constants

From androidx.media3.common.audio.AudioProcessor
static final ByteBuffer

An empty, direct ByteBuffer.

Inherited fields

From androidx.media3.common.audio.BaseAudioProcessor
AudioProcessor.AudioFormat

The current input audio format.

AudioProcessor.AudioFormat

The current output audio format.

Inherited methods

From androidx.media3.common.audio.BaseAudioProcessor
final AudioProcessor.AudioFormat

Configures the processor to process input audio with the specified format.

final void

Clears any buffered data and pending output.

ByteBuffer

Returns a buffer containing processed output data between its position and limit.

final boolean

Returns whether the current output buffer has any data remaining.

boolean

Returns whether this processor will return no more output from getOutput until flush has been called and more input has been queued.

final void

Queues an end of stream signal.

final ByteBuffer

Replaces the current output buffer with a buffer of at least size bytes and returns it.

final void

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

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(
    long minimumSilenceDurationUs,
    long paddingSilenceUs,
    short silenceThresholdLevel
)

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

isActive

public boolean isActive()

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

onFlush

public void onFlush()

Called when the processor is flushed, directly or as part of resetting.

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 getOutput. Calling queueInput(ByteBuffer) again invalidates any pending output.

Parameters
ByteBuffer 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 isActive may change, and the processor must be flushed 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.