# SpeedChangingAudioProcessor

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

*** ** * ** ***

Kotlin \|[Java](https://developer.android.com/reference/androidx/media3/common/audio/SpeedChangingAudioProcessor "View this page in Java")


```
@UnstableApi
class SpeedChangingAudioProcessor : AudioProcessor
```

<br />

*** ** * ** ***

An `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor` that changes the speed of audio samples depending on their timestamp.

## Summary

| ### Public constructors |
|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/SpeedChangingAudioProcessor#SpeedChangingAudioProcessor(androidx.media3.common.audio.SpeedProvider)(speedProvider: https://developer.android.com/reference/kotlin/androidx/media3/common/audio/SpeedProvider!)` Creates a new instance. |

| ### Public functions |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor.AudioFormat!` | `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/SpeedChangingAudioProcessor#configure(androidx.media3.common.audio.AudioProcessor.AudioFormat)(inputAudioFormat: https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor.AudioFormat!)` Configures the processor to process input audio with the specified format. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/SpeedChangingAudioProcessor#flush(androidx.media3.common.audio.AudioProcessor.StreamMetadata)(streamMetadata: https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor.StreamMetadata!)` Prepares the audio processor to receive a new stream of input in the last `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor#configure(androidx.media3.common.audio.AudioProcessor.AudioFormat)` and clears any buffered data and pending output. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/SpeedChangingAudioProcessor#getDurationAfterProcessorApplied(long)(durationUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html)` Returns the expected duration of the output stream when the processor is applied given a input `durationUs`. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/SpeedChangingAudioProcessor#getMediaDurationUs(long)(playoutDurationUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html)` Returns the input media duration in microseconds for the given playout duration. |
| `https://developer.android.com/reference/java/nio/ByteBuffer.html!` | `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/SpeedChangingAudioProcessor#getOutput()()` Returns a buffer containing processed output data between its position and limit. |
| `java-static https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/SpeedChangingAudioProcessor#getSampleCountAfterProcessorApplied(androidx.media3.common.audio.SpeedProvider,int,long)( speedProvider: https://developer.android.com/reference/kotlin/androidx/media3/common/audio/SpeedProvider!, inputSampleRateHz: @https://developer.android.com/reference/kotlin/androidx/annotation/IntRange(from = 1) https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, inputSamples: @https://developer.android.com/reference/kotlin/androidx/annotation/IntRange(from = 0) https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html )` Returns the estimated number of samples output given the provided parameters. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/SpeedChangingAudioProcessor#getSpeedAdjustedTimeAsync(long,androidx.media3.common.util.TimestampConsumer)(inputTimeUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html, callback: https://developer.android.com/reference/kotlin/androidx/media3/common/util/TimestampConsumer!)` Calculates the time at which the `inputTimeUs` is outputted at after the speed changes has been applied. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/SpeedChangingAudioProcessor#isActive()()` Returns whether the processor is configured and will process input buffers. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/SpeedChangingAudioProcessor#isEnded()()` Returns whether this processor will return no more output from `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor#getOutput()` until `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor#flush()` has been called and more input has been queued. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/SpeedChangingAudioProcessor#queueEndOfStream()()` Queues an end of stream signal. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/SpeedChangingAudioProcessor#queueInput(java.nio.ByteBuffer)(inputBuffer: https://developer.android.com/reference/java/nio/ByteBuffer.html!)` Queues audio data between the position and limit of the `inputBuffer` for processing. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/SpeedChangingAudioProcessor#reset()()` Resets the processor to its unconfigured state, releasing any resources. |

| ### Public properties |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/SpeedProvider!` | `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/SpeedChangingAudioProcessor#speedProvider()` The speed provider that provides the speed for each timestamp. |

| ### Inherited Constants |
|---|
| From [androidx.media3.common.audio.AudioProcessor](https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor) |---|---| | `const https://developer.android.com/reference/java/nio/ByteBuffer.html!` | `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor#EMPTY_BUFFER()` An empty, direct `https://developer.android.com/reference/java/nio/ByteBuffer.html`. | |

| ### Inherited functions |
|---|
| From [androidx.media3.common.audio.AudioProcessor](https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor) |---|---| | `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `[flush](https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor#flush())()` **This function is deprecated.** Use `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor#flush(androidx.media3.common.audio.AudioProcessor.StreamMetadata)` instead. <br /> | |

## Public constructors

### SpeedChangingAudioProcessor

```
SpeedChangingAudioProcessor(speedProvider: SpeedProvider!)
```

Creates a new instance.

## Public functions

### configure

```
fun configure(inputAudioFormat: AudioProcessor.AudioFormat!): AudioProcessor.AudioFormat!
```

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

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

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

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

### flush

```
fun flush(streamMetadata: AudioProcessor.StreamMetadata!): Unit
```

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

### getDurationAfterProcessorApplied

```
fun getDurationAfterProcessorApplied(durationUs: Long): Long
```

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

### getMediaDurationUs

```
fun getMediaDurationUs(playoutDurationUs: Long): Long
```

Returns the input media duration in microseconds for the given playout duration.

This method returns the inverse of `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/SpeedChangingAudioProcessor#getSpeedAdjustedTimeAsync(long,androidx.media3.common.util.TimestampConsumer)` when the instance has been configured and flushed. Otherwise, it returns `playoutDurationUs`.

| Parameters |
|---|---|
| `playoutDurationUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | The playout duration in microseconds. |

### getOutput

```
fun getOutput(): ByteBuffer!
```

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

### getSampleCountAfterProcessorApplied

```
java-static fun getSampleCountAfterProcessorApplied(
    speedProvider: SpeedProvider!,
    inputSampleRateHz: @IntRange(from = 1) Int,
    inputSamples: @IntRange(from = 0) Long
): Long
```

Returns the estimated number of samples output given the provided parameters.

### getSpeedAdjustedTimeAsync

```
fun getSpeedAdjustedTimeAsync(inputTimeUs: Long, callback: TimestampConsumer!): Unit
```

Calculates the time at which the `inputTimeUs` is outputted at after the speed changes has been applied.

Calls `https://developer.android.com/reference/java/util/function/LongConsumer.html#accept(long)` with the output time as soon as enough audio has been processed to calculate it.

If the audio processor has ended, speeds will come out at the last processed speed of the audio processor.

Successive calls must have monotonically increasing `inputTimeUs`.

Can be called from any thread.

| Parameters |
|---|---|
| `inputTimeUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | The input time, in microseconds. |
| `callback: https://developer.android.com/reference/kotlin/androidx/media3/common/util/TimestampConsumer!` | The callback called with the output time. May be called on a different thread from the caller of this method. |

### isActive

```
fun isActive(): Boolean
```

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

### isEnded

```
fun isEnded(): Boolean
```

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

### queueEndOfStream

```
fun queueEndOfStream(): Unit
```

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

### queueInput

```
fun queueInput(inputBuffer: ByteBuffer!): Unit
```

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/kotlin/androidx/media3/common/audio/AudioProcessor#getOutput()`. Calling `queueInput(ByteBuffer)` again invalidates any pending output.

| Parameters |
|---|---|
| `inputBuffer: https://developer.android.com/reference/java/nio/ByteBuffer.html!` | 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

```
fun reset(): Unit
```

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

## Public properties

### speedProvider

```
val speedProvider: SpeedProvider!
```

The speed provider that provides the speed for each timestamp.