SonicAudioProcessor
@UnstableApi
class SonicAudioProcessor : AudioProcessor
An AudioProcessor that uses the Sonic library to modify audio speed/pitch/sample rate.
Summary
Constants |
|
|---|---|
const Int |
Indicates that the output sample rate should be the same as the input. |
Public constructors |
|---|
|
Creates a new Sonic audio processor. |
Public functions |
|
|---|---|
AudioProcessor.AudioFormat! |
configure(inputAudioFormat: AudioProcessor.AudioFormat!)Configures the processor to process input audio with the specified format. |
Unit |
flush(streamMetadata: AudioProcessor.StreamMetadata!)Prepares the audio processor to receive a new stream of input in the last |
Long |
getDurationAfterProcessorApplied(durationUs: Long)Returns the expected duration of the output stream when the processor is applied given a input |
Long |
getMediaDuration(playoutDuration: Long)Returns the media duration corresponding to the specified playout duration, taking speed adjustment into account. |
ByteBuffer! |
Returns a buffer containing processed output data between its position and limit. |
Long |
getPlayoutDuration(mediaDuration: Long)Returns the playout duration corresponding to the specified media duration, taking speed adjustment into account. |
Long |
Returns the number of bytes processed since last flush or reset. |
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 |
Unit |
Queues an end of stream signal. |
Unit |
queueInput(inputBuffer: ByteBuffer!)Queues audio data between the position and limit of the |
Unit |
reset()Resets the processor to its unconfigured state, releasing any resources. |
Unit |
setOutputSampleRateHz(sampleRateHz: Int)Sets the sample rate for output audio, in Hertz. |
Unit |
setPitch(pitch: @FloatRange(from = 0.0, fromInclusive = false) Float)Sets the target playback pitch. |
Unit |
setSpeed(speed: @FloatRange(from = 0.0, fromInclusive = false) Float)Sets the target playback speed. |
Inherited Constants |
||
|---|---|---|
|
Constants
SAMPLE_RATE_NO_CHANGE
const val SAMPLE_RATE_NO_CHANGE = -1: Int
Indicates that the output sample rate should be the same as the input.
Public constructors
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 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 | |
|---|---|
inputAudioFormat: AudioProcessor.AudioFormat! |
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
fun flush(streamMetadata: AudioProcessor.StreamMetadata!): Unit
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
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).
getMediaDuration
fun getMediaDuration(playoutDuration: Long): Long
Returns the media duration corresponding to the specified playout duration, taking speed adjustment into account.
The scaling performed by this method will use the actual playback speed achieved by the audio processor, on average, since it was last flushed. This may differ very slightly from the target playback speed.
| Parameters | |
|---|---|
playoutDuration: Long |
The playout duration to scale. |
| Returns | |
|---|---|
Long |
The corresponding media duration, in the same units as |
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 | |
|---|---|
ByteBuffer! |
A buffer containing processed output data between its position and limit. |
getPlayoutDuration
fun getPlayoutDuration(mediaDuration: Long): Long
Returns the playout duration corresponding to the specified media duration, taking speed adjustment into account.
The scaling performed by this method will use the actual playback speed achieved by the audio processor, on average, since it was last flushed. This may differ very slightly from the target playback speed.
| Parameters | |
|---|---|
mediaDuration: Long |
The media duration to scale. |
| Returns | |
|---|---|
Long |
The corresponding playout duration, in the same units as |
getProcessedInputBytes
fun getProcessedInputBytes(): Long
Returns the number of bytes processed since last flush or reset.
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 getOutput until 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, 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
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 getOutput. Calling queueInput(ByteBuffer) again invalidates any pending output.
| Parameters | |
|---|---|
inputBuffer: ByteBuffer! |
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. |
setOutputSampleRateHz
fun setOutputSampleRateHz(sampleRateHz: Int): Unit
Sets the sample rate for output audio, in Hertz. Pass SAMPLE_RATE_NO_CHANGE to output audio at the same sample rate as the input. After calling this method, call configure to configure the processor with the new sample rate.
| Parameters | |
|---|---|
sampleRateHz: Int |
The sample rate for output audio, in Hertz. |
| See also | |
|---|---|
configure |
setPitch
fun setPitch(pitch: @FloatRange(from = 0.0, fromInclusive = false) Float): Unit
Sets the target playback pitch. 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 | |
|---|---|
pitch: @FloatRange(from = 0.0, fromInclusive = false) Float |
The target pitch. |
setSpeed
fun setSpeed(speed: @FloatRange(from = 0.0, fromInclusive = false) Float): Unit
Sets the target playback speed. 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 | |
|---|---|
speed: @FloatRange(from = 0.0, fromInclusive = false) Float |
The target factor by which playback should be sped up. |