SpeedChangingAudioProcessor
@UnstableApi
public final class SpeedChangingAudioProcessor implements AudioProcessor
An AudioProcessor that changes the speed of audio samples depending on their timestamp.
Summary
Public fields |
|
|---|---|
final SpeedProvider |
The speed provider that provides the speed for each timestamp. |
Public constructors |
|---|
SpeedChangingAudioProcessor(SpeedProvider speedProvider) |
Public methods |
|
|---|---|
AudioProcessor.AudioFormat |
configure(AudioProcessor.AudioFormat inputAudioFormat)Configures the processor to process input audio with the specified format. |
void |
flush(AudioProcessor.StreamMetadata streamMetadata)Prepares the audio processor to receive a new stream of input in the last |
long |
getDurationAfterProcessorApplied(long durationUs)Returns the expected duration of the output stream when the processor is applied given a input |
long |
getMediaDurationUs(long playoutDurationUs)Returns the input media duration in microseconds for the given playout duration. |
ByteBuffer |
Returns a buffer containing processed output data between its position and limit. |
static long |
getSampleCountAfterProcessorApplied(Returns the estimated number of samples output given the provided parameters. |
void |
getSpeedAdjustedTimeAsync(long inputTimeUs, TimestampConsumer callback)Calculates the time at which the |
SpeedProvider |
Returns the |
boolean |
isActive()Returns whether the processor is configured and will process input buffers. |
boolean |
isEnded()Returns whether this processor will return no more output from |
void |
Queues an end of stream signal. |
void |
queueInput(ByteBuffer inputBuffer)Queues audio data between the position and limit of the |
void |
reset()Resets the processor to its unconfigured state, releasing any resources. |
Inherited Constants |
||
|---|---|---|
|
Public fields
speedProvider
public final SpeedProvider speedProvider
The speed provider that provides the speed for each timestamp.
Public constructors
Public methods
configure
public AudioProcessor.AudioFormat configure(AudioProcessor.AudioFormat inputAudioFormat)
Configures the processor to process input audio with the specified format. After calling this method, call 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 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 queueEndOfStream when no more input will be supplied in the old input format.
| Parameters | |
|---|---|
AudioProcessor.AudioFormat inputAudioFormat |
The format of audio that will be queued after the next call to |
| Returns | |
|---|---|
AudioProcessor.AudioFormat |
The configured output audio format if this instance is |
| Throws | |
|---|---|
androidx.media3.common.audio.AudioProcessor.UnhandledAudioFormatException |
Thrown if the specified format can't be handled as input. |
flush
public void flush(AudioProcessor.StreamMetadata streamMetadata)
Prepares the audio processor to receive a new stream of input in the last configured format and clears any buffered data and pending output.
This method is a no-op if the processor is not active.
getDurationAfterProcessorApplied
public long getDurationAfterProcessorApplied(long durationUs)
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
public long getMediaDurationUs(long playoutDurationUs)
Returns the input media duration in microseconds for the given playout duration.
This method returns the inverse of getSpeedAdjustedTimeAsync when the instance has been configured and flushed. Otherwise, it returns playoutDurationUs.
| Parameters | |
|---|---|
long playoutDurationUs |
The playout duration in microseconds. |
getOutput
public ByteBuffer getOutput()
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 | |
|---|---|
ByteBuffer |
A buffer containing processed output data between its position and limit. |
getSampleCountAfterProcessorApplied
public static long getSampleCountAfterProcessorApplied(
SpeedProvider speedProvider,
@IntRange(from = 1) int inputSampleRateHz,
@IntRange(from = 0) long inputSamples
)
Returns the estimated number of samples output given the provided parameters.
getSpeedAdjustedTimeAsync
public void getSpeedAdjustedTimeAsync(long inputTimeUs, TimestampConsumer callback)
Calculates the time at which the inputTimeUs is outputted at after the speed changes has been applied.
Calls the callback 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 | |
|---|---|
long inputTimeUs |
The input time, in microseconds. |
TimestampConsumer callback |
The callback called with the output time. May be called on a different thread from the caller of this method. |
getSpeedProvider
public SpeedProvider getSpeedProvider()
Returns the SpeedProvider set for this instance.
isActive
public boolean isActive()
Returns whether the processor is configured and will process input buffers.
isEnded
public boolean isEnded()
Returns whether this processor will return no more output from getOutput until flush has been called and more input has been queued.
queueEndOfStream
public void queueEndOfStream()
Queues an end of stream signal. After this method has been called, queueInput may not be called until after the next call to flush. Calling getOutput will return any remaining output data. Multiple calls may be required to read all of the remaining output data. isEnded will return true once all remaining output data has been read.
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. |