# StudioSoundAudioProcessor

Artifact: [androidx.media3:media3-effect-play-services](https://developer.android.com/jetpack/androidx/releases/media3) [View Source](https://cs.android.com/search?q=file:androidx/media3/effect/playservices/StudioSoundAudioProcessor.java+class:androidx.media3.effect.playservices.StudioSoundAudioProcessor)

*** ** * ** ***


```
@RequiresApi(value = 27)
@ExperimentalApi
class StudioSoundAudioProcessor : BaseAudioProcessor
```

<br />

|---|---|---|
| [kotlin.Any](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html) |||
| ↳ | [androidx.media3.common.audio.BaseAudioProcessor](https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor) ||
|   | ↳ | [androidx.media3.effect.playservices.StudioSoundAudioProcessor](https://developer.android.com/reference/kotlin/androidx/media3/effect/playservices/StudioSoundAudioProcessor) |

*** ** * ** ***

`https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor` implementation for audio source separation using the [StudioSound Google Play services module](https://developers.google.com/android/reference/com/google/android/gms/media/effect/studiosound/package-summary).

This `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor` outputs 8 or 16 interleaved channels containing the separated sources from the received input stream, for mono or stereo input respectively. `https://developer.android.com/reference/kotlin/androidx/media3/effect/playservices/StudioSoundAudioProcessor#getResults()` provides information about each resulting source, including what label it was classified as and what channel indices in the output stream that source corresponds to.

The StudioSound module only supports up to 2 minutes of input. `https://developer.android.com/reference/kotlin/androidx/media3/effect/playservices/StudioSoundAudioProcessor#queueInput(java.nio.ByteBuffer)` will throw if the caller attempts to process an input stream beyond 2 minutes.

Each instance only supports processing one input stream. Any attempt to reuse the processor after processing a stream will throw.

This `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor` holds an internal `https://developer.android.com/reference/java/util/concurrent/ExecutorService.html` for handling asynchronous events. If using this class as a standalone effect, call `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#reset()` to release this `https://developer.android.com/reference/java/util/concurrent/ExecutorService.html` and other resources.

## Summary

| ### Nested types |
|---|
| `@https://developer.android.com/reference/java/lang/annotation/Documented.html @https://developer.android.com/reference/java/lang/annotation/Retention.html(value = https://developer.android.com/reference/java/lang/annotation/RetentionPolicy.html#SOURCE) @https://developer.android.com/reference/java/lang/annotation/Target.html(value = https://developer.android.com/reference/java/lang/annotation/ElementType.html#TYPE_USE) @https://developer.android.com/reference/kotlin/androidx/annotation/IntDef(value = ) annotation https://developer.android.com/reference/kotlin/androidx/media3/effect/playservices/StudioSoundAudioProcessor.AudioType` Type of separated source. |
| `class https://developer.android.com/reference/kotlin/androidx/media3/effect/playservices/StudioSoundAudioProcessor.SeparationResult` A record containing metadata about a separated source. |

| ### Constants |
|---|---|
| `const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/effect/playservices/StudioSoundAudioProcessor#AUDIO_TYPE_CROWD() = 2` See `https://developers.google.com/android/reference/com/google/android/gms/media/effect/studiosound/StudioSoundAudioType.html#CROWD`. |
| `const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/effect/playservices/StudioSoundAudioProcessor#AUDIO_TYPE_MUSIC() = 3` See `https://developers.google.com/android/reference/com/google/android/gms/media/effect/studiosound/StudioSoundAudioType.html#MUSIC`. |
| `const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/effect/playservices/StudioSoundAudioProcessor#AUDIO_TYPE_NATURE() = 4` See `https://developers.google.com/android/reference/com/google/android/gms/media/effect/studiosound/StudioSoundAudioType.html#NATURE`. |
| `const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/effect/playservices/StudioSoundAudioProcessor#AUDIO_TYPE_NOISE() = 6` See `https://developers.google.com/android/reference/com/google/android/gms/media/effect/studiosound/StudioSoundAudioType.html#NOISE`. |
| `const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/effect/playservices/StudioSoundAudioProcessor#AUDIO_TYPE_SPEECH() = 1` See `https://developers.google.com/android/reference/com/google/android/gms/media/effect/studiosound/StudioSoundAudioType.html#SPEECH`. |
| `const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/effect/playservices/StudioSoundAudioProcessor#AUDIO_TYPE_UNSPECIFIED() = 0` See `https://developers.google.com/android/reference/com/google/android/gms/media/effect/studiosound/StudioSoundAudioType.html#UNSPECIFIED`. |
| `const https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/effect/playservices/StudioSoundAudioProcessor#AUDIO_TYPE_WIND() = 5` See `https://developers.google.com/android/reference/com/google/android/gms/media/effect/studiosound/StudioSoundAudioType.html#WIND`. |

| ### Public functions |
|---|---|
| `java-static https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<https://developer.android.com/reference/kotlin/androidx/media3/effect/playservices/StudioSoundAudioProcessor!>!` | `https://developer.android.com/reference/kotlin/androidx/media3/effect/playservices/StudioSoundAudioProcessor#create(android.content.Context)(context: https://developer.android.com/reference/android/content/Context.html!)` Returns a future that provides a new `https://developer.android.com/reference/kotlin/androidx/media3/effect/playservices/StudioSoundAudioProcessor` instance. |
| `https://developer.android.com/reference/java/nio/ByteBuffer.html!` | `https://developer.android.com/reference/kotlin/androidx/media3/effect/playservices/StudioSoundAudioProcessor#getOutput()()` Returns a buffer containing processed output data between its position and limit. |
| `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/collect/ImmutableList.html<https://developer.android.com/reference/kotlin/androidx/media3/effect/playservices/StudioSoundAudioProcessor.SeparationResult!>?` | `https://developer.android.com/reference/kotlin/androidx/media3/effect/playservices/StudioSoundAudioProcessor#getResults()()` Returns a list of `https://developer.android.com/reference/kotlin/androidx/media3/effect/playservices/StudioSoundAudioProcessor.SeparationResult` that holds information about the channels and labels corresponding to each separated source, or `null` if processing has not completed. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/effect/playservices/StudioSoundAudioProcessor#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/effect/playservices/StudioSoundAudioProcessor#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. |

| ### Protected functions |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor.AudioFormat!` | `https://developer.android.com/reference/kotlin/androidx/media3/effect/playservices/StudioSoundAudioProcessor#onConfigure(androidx.media3.common.audio.AudioProcessor.AudioFormat)(inputAudioFormat: https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor.AudioFormat!)` Called when the processor is configured for a new input format. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/effect/playservices/StudioSoundAudioProcessor#onFlush(androidx.media3.common.audio.AudioProcessor.StreamMetadata)(streamMetadata: https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor.StreamMetadata!)` Called when the processor is `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor#flush(androidx.media3.common.audio.AudioProcessor.StreamMetadata)`. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/effect/playservices/StudioSoundAudioProcessor#onQueueEndOfStream()()` Called when the end-of-stream is queued to the processor. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/effect/playservices/StudioSoundAudioProcessor#onReset()()` Called when the processor is reset. |

### 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/-long/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor#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`.
From [androidx.media3.common.audio.BaseAudioProcessor](https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor) `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor.AudioFormat!` `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#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` `[flush](https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#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 />

`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#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/-boolean/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#hasPendingOutput()()`

Returns whether the current output buffer has any data remaining.
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` `@https://developer.android.com/reference/kotlin/androidx/annotation/CallSuper
https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#isActive()()`

Returns whether the processor is configured and will process input buffers.
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `[onFlush](https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#onFlush())()`

**This function is deprecated.**

Use `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#onFlush(androidx.media3.common.audio.AudioProcessor.StreamMetadata)` instead.

<br />

`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#queueEndOfStream()()`

Queues an end of stream signal.
`https://developer.android.com/reference/java/nio/ByteBuffer.html!` `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#replaceOutputBuffer(int)(size: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)`

Replaces the current output buffer with a buffer of at least `size` bytes and returns it.
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#reset()()`

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

### Inherited properties

From [androidx.media3.common.audio.BaseAudioProcessor](https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor) `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor.AudioFormat!` `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#inputAudioFormat()`

The current input audio format.
`https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor.AudioFormat!` `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/BaseAudioProcessor#outputAudioFormat()`

The current output audio format.

## Constants

### AUDIO_TYPE_CROWD

```
const val AUDIO_TYPE_CROWD = 2: Int
```

See `https://developers.google.com/android/reference/com/google/android/gms/media/effect/studiosound/StudioSoundAudioType.html#CROWD`.

### AUDIO_TYPE_MUSIC

```
const val AUDIO_TYPE_MUSIC = 3: Int
```

See `https://developers.google.com/android/reference/com/google/android/gms/media/effect/studiosound/StudioSoundAudioType.html#MUSIC`.

### AUDIO_TYPE_NATURE

```
const val AUDIO_TYPE_NATURE = 4: Int
```

See `https://developers.google.com/android/reference/com/google/android/gms/media/effect/studiosound/StudioSoundAudioType.html#NATURE`.

### AUDIO_TYPE_NOISE

```
const val AUDIO_TYPE_NOISE = 6: Int
```

See `https://developers.google.com/android/reference/com/google/android/gms/media/effect/studiosound/StudioSoundAudioType.html#NOISE`.

### AUDIO_TYPE_SPEECH

```
const val AUDIO_TYPE_SPEECH = 1: Int
```

See `https://developers.google.com/android/reference/com/google/android/gms/media/effect/studiosound/StudioSoundAudioType.html#SPEECH`.

### AUDIO_TYPE_UNSPECIFIED

```
const val AUDIO_TYPE_UNSPECIFIED = 0: Int
```

See `https://developers.google.com/android/reference/com/google/android/gms/media/effect/studiosound/StudioSoundAudioType.html#UNSPECIFIED`.

### AUDIO_TYPE_WIND

```
const val AUDIO_TYPE_WIND = 5: Int
```

See `https://developers.google.com/android/reference/com/google/android/gms/media/effect/studiosound/StudioSoundAudioType.html#WIND`.

## Public functions

### create

```
java-static fun create(context: Context!): ListenableFuture<StudioSoundAudioProcessor!>!
```

Returns a future that provides a new `https://developer.android.com/reference/kotlin/androidx/media3/effect/playservices/StudioSoundAudioProcessor` instance.

This method verify that the current device supports the Google Play services StudioSound module, attempt to download and install it if needed, and then return a new instance of `https://developer.android.com/reference/kotlin/androidx/media3/effect/playservices/StudioSoundAudioProcessor`.

| Parameters |
|---|---|
| `context: https://developer.android.com/reference/android/content/Context.html!` | The `https://developer.android.com/reference/android/content/Context.html`. |

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

### getResults

```
fun getResults(): ImmutableList<StudioSoundAudioProcessor.SeparationResult!>?
```

Returns a list of `https://developer.android.com/reference/kotlin/androidx/media3/effect/playservices/StudioSoundAudioProcessor.SeparationResult` that holds information about the channels and labels corresponding to each separated source, or `null` if processing has not completed.

Any channels that do not map to a `https://developer.android.com/reference/kotlin/androidx/media3/effect/playservices/StudioSoundAudioProcessor.SeparationResult` are empty and should be ignored.

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

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

## Protected functions

### onConfigure

```
protected fun onConfigure(inputAudioFormat: AudioProcessor.AudioFormat!): AudioProcessor.AudioFormat!
```

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

| Throws |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor.UnhandledAudioFormatException` |   |

### onFlush

```
protected fun onFlush(streamMetadata: AudioProcessor.StreamMetadata!): Unit
```

Called when the processor is `https://developer.android.com/reference/kotlin/androidx/media3/common/audio/AudioProcessor#flush(androidx.media3.common.audio.AudioProcessor.StreamMetadata)`.

### onQueueEndOfStream

```
protected fun onQueueEndOfStream(): Unit
```

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

### onReset

```
protected fun onReset(): Unit
```

Called when the processor is reset.