# 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
public final class StudioSoundAudioProcessor extends BaseAudioProcessor
```

<br />

|---|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object.html) |||
| ↳ | [androidx.media3.common.audio.BaseAudioProcessor](https://developer.android.com/reference/androidx/media3/common/audio/BaseAudioProcessor) ||
|   | ↳ | [androidx.media3.effect.playservices.StudioSoundAudioProcessor](https://developer.android.com/reference/androidx/media3/effect/playservices/StudioSoundAudioProcessor) |

*** ** * ** ***

`https://developer.android.com/reference/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/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/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/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/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/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/androidx/annotation/IntDef(value = ) public annotation https://developer.android.com/reference/androidx/media3/effect/playservices/StudioSoundAudioProcessor.AudioType` Type of separated source. |
| `public final class https://developer.android.com/reference/androidx/media3/effect/playservices/StudioSoundAudioProcessor.SeparationResult` A record containing metadata about a separated source. |

| ### Constants |
|---|---|
| `static final int` | `https://developer.android.com/reference/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`. |
| `static final int` | `https://developer.android.com/reference/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`. |
| `static final int` | `https://developer.android.com/reference/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`. |
| `static final int` | `https://developer.android.com/reference/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`. |
| `static final int` | `https://developer.android.com/reference/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`. |
| `static final int` | `https://developer.android.com/reference/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`. |
| `static final int` | `https://developer.android.com/reference/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 methods |
|---|---|
| `static https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<https://developer.android.com/reference/androidx/media3/effect/playservices/StudioSoundAudioProcessor>` | `https://developer.android.com/reference/androidx/media3/effect/playservices/StudioSoundAudioProcessor#create(android.content.Context)(https://developer.android.com/reference/android/content/Context.html context)` Returns a future that provides a new `https://developer.android.com/reference/androidx/media3/effect/playservices/StudioSoundAudioProcessor` instance. |
| `https://developer.android.com/reference/java/nio/ByteBuffer.html` | `https://developer.android.com/reference/androidx/media3/effect/playservices/StudioSoundAudioProcessor#getOutput()()` Returns a buffer containing processed output data between its position and limit. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://guava.dev/releases/snapshot-android/api/docs/com/google/common/collect/ImmutableList.html<https://developer.android.com/reference/androidx/media3/effect/playservices/StudioSoundAudioProcessor.SeparationResult>` | `https://developer.android.com/reference/androidx/media3/effect/playservices/StudioSoundAudioProcessor#getResults()()` Returns a list of `https://developer.android.com/reference/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. |
| `boolean` | `https://developer.android.com/reference/androidx/media3/effect/playservices/StudioSoundAudioProcessor#isEnded()()` Returns whether this processor will return no more output from `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor#getOutput()` until `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor#flush()` has been called and more input has been queued. |
| `void` | `https://developer.android.com/reference/androidx/media3/effect/playservices/StudioSoundAudioProcessor#queueInput(java.nio.ByteBuffer)(https://developer.android.com/reference/java/nio/ByteBuffer.html inputBuffer)` Queues audio data between the position and limit of the `inputBuffer` for processing. |

| ### Protected methods |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor.AudioFormat` | `https://developer.android.com/reference/androidx/media3/effect/playservices/StudioSoundAudioProcessor#onConfigure(androidx.media3.common.audio.AudioProcessor.AudioFormat)(https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor.AudioFormat inputAudioFormat)` Called when the processor is configured for a new input format. |
| `void` | `https://developer.android.com/reference/androidx/media3/effect/playservices/StudioSoundAudioProcessor#onFlush(androidx.media3.common.audio.AudioProcessor.StreamMetadata)(https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor.StreamMetadata streamMetadata)` Called when the processor is `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor#flush(androidx.media3.common.audio.AudioProcessor.StreamMetadata)`. |
| `void` | `https://developer.android.com/reference/androidx/media3/effect/playservices/StudioSoundAudioProcessor#onQueueEndOfStream()()` Called when the end-of-stream is queued to the processor. |
| `void` | `https://developer.android.com/reference/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/androidx/media3/common/audio/AudioProcessor) `static final https://developer.android.com/reference/java/nio/ByteBuffer.html` `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor#EMPTY_BUFFER()`

An empty, direct `https://developer.android.com/reference/java/nio/ByteBuffer.html`.

### Inherited fields

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

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

The current output audio format.

### Inherited methods

From [androidx.media3.common.audio.AudioProcessor](https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor) `long` `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor#getDurationAfterProcessorApplied(long)(long durationUs)`

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/androidx/media3/common/audio/BaseAudioProcessor) `final https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor.AudioFormat` `https://developer.android.com/reference/androidx/media3/common/audio/BaseAudioProcessor#configure(androidx.media3.common.audio.AudioProcessor.AudioFormat)(https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor.AudioFormat inputAudioFormat)`

Configures the processor to process input audio with the specified format.
`final void` `[flush](https://developer.android.com/reference/androidx/media3/common/audio/BaseAudioProcessor#flush())()`

**This method is deprecated.**

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

<br />

`final void` `https://developer.android.com/reference/androidx/media3/common/audio/BaseAudioProcessor#flush(androidx.media3.common.audio.AudioProcessor.StreamMetadata)(https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor.StreamMetadata streamMetadata)`

Prepares the audio processor to receive a new stream of input in the last `https://developer.android.com/reference/androidx/media3/common/audio/AudioProcessor#configure(androidx.media3.common.audio.AudioProcessor.AudioFormat)` and clears any buffered data and pending output.
`final boolean` `https://developer.android.com/reference/androidx/media3/common/audio/BaseAudioProcessor#hasPendingOutput()()`

Returns whether the current output buffer has any data remaining.
`boolean` `@https://developer.android.com/reference/androidx/annotation/CallSuper
https://developer.android.com/reference/androidx/media3/common/audio/BaseAudioProcessor#isActive()()`

Returns whether the processor is configured and will process input buffers.
`void` `[onFlush](https://developer.android.com/reference/androidx/media3/common/audio/BaseAudioProcessor#onFlush())()`

**This method is deprecated.**

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

<br />

`final void` `https://developer.android.com/reference/androidx/media3/common/audio/BaseAudioProcessor#queueEndOfStream()()`

Queues an end of stream signal.
`final https://developer.android.com/reference/java/nio/ByteBuffer.html` `https://developer.android.com/reference/androidx/media3/common/audio/BaseAudioProcessor#replaceOutputBuffer(int)(int size)`

Replaces the current output buffer with a buffer of at least `size` bytes and returns it.
`final void` `https://developer.android.com/reference/androidx/media3/common/audio/BaseAudioProcessor#reset()()`

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

## Constants

### AUDIO_TYPE_CROWD

```
public static final int AUDIO_TYPE_CROWD = 2
```

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

### AUDIO_TYPE_MUSIC

```
public static final int AUDIO_TYPE_MUSIC = 3
```

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

### AUDIO_TYPE_NATURE

```
public static final int AUDIO_TYPE_NATURE = 4
```

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

### AUDIO_TYPE_NOISE

```
public static final int AUDIO_TYPE_NOISE = 6
```

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

### AUDIO_TYPE_SPEECH

```
public static final int AUDIO_TYPE_SPEECH = 1
```

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

### AUDIO_TYPE_UNSPECIFIED

```
public static final int AUDIO_TYPE_UNSPECIFIED = 0
```

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

### AUDIO_TYPE_WIND

```
public static final int AUDIO_TYPE_WIND = 5
```

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

## Public methods

### create

```
public static ListenableFuture<StudioSoundAudioProcessor> create(Context context)
```

Returns a future that provides a new `https://developer.android.com/reference/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/androidx/media3/effect/playservices/StudioSoundAudioProcessor`.

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

### 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 |
|---|---|
| `https://developer.android.com/reference/java/nio/ByteBuffer.html` | A buffer containing processed output data between its position and limit. |

### getResults

```
public @Nullable ImmutableList<StudioSoundAudioProcessor.SeparationResult> getResults()
```

Returns a list of `https://developer.android.com/reference/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/androidx/media3/effect/playservices/StudioSoundAudioProcessor.SeparationResult` are empty and should be ignored.

### isEnded

```
public boolean isEnded()
```

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

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

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

## Protected methods

### onConfigure

```
protected AudioProcessor.AudioFormat onConfigure(AudioProcessor.AudioFormat inputAudioFormat)
```

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

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

### onFlush

```
protected void onFlush(AudioProcessor.StreamMetadata streamMetadata)
```

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

### onQueueEndOfStream

```
protected void onQueueEndOfStream()
```

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

### onReset

```
protected void onReset()
```

Called when the processor is reset.