# AudioSink.Listener

Artifact: [androidx.media3:media3-exoplayer](https://developer.android.com/jetpack/androidx/releases/media3) [View Source](https://cs.android.com/search?q=file:androidx/media3/exoplayer/audio/AudioSink.java+class:androidx.media3.exoplayer.audio.AudioSink.Listener)

*** ** * ** ***


```
public interface AudioSink.Listener
```

<br />

*** ** * ** ***

Listener for audio sink events.

## Summary

| ### Public methods |
|---|---|
| `default void` | `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink.Listener#onAudioCapabilitiesChanged()()` Called when audio capabilities changed. |
| `default void` | `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink.Listener#onAudioSessionIdChanged(int)(int audioSessionId)` Called when the audio session ID changed internally. |
| `default void` | `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink.Listener#onAudioSinkError(java.lang.Exception)(https://developer.android.com/reference/java/lang/Exception.html audioSinkError)` Called when `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink` has encountered an error. |
| `default void` | `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink.Listener#onAudioTrackInitialized(androidx.media3.exoplayer.audio.AudioSink.AudioTrackConfig)(https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink.AudioTrackConfig audioTrackConfig)` Called when an `https://developer.android.com/reference/android/media/AudioTrack.html` has been initialized. |
| `default void` | `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink.Listener#onAudioTrackReleased(androidx.media3.exoplayer.audio.AudioSink.AudioTrackConfig)(https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink.AudioTrackConfig audioTrackConfig)` Called when an `https://developer.android.com/reference/android/media/AudioTrack.html` has been released. |
| `default void` | `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink.Listener#onOffloadBufferEmptying()()` Called when the offload buffer has been partially emptied. |
| `default void` | `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink.Listener#onOffloadBufferFull()()` Called when the offload buffer has been filled completely. |
| `default void` | `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink.Listener#onPositionAdvancing(long)(long playoutStartSystemTimeMs)` Called when the audio sink's position has increased for the first time since it was last paused or flushed. |
| `abstract void` | `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink.Listener#onPositionDiscontinuity()()` Called when the audio sink handles a buffer whose timestamp is discontinuous with the last buffer handled since it was reset. |
| `default void` | `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink.Listener#onSilenceSkipped()()` Called when a period of silence has been skipped. |
| `abstract void` | `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink.Listener#onSkipSilenceEnabledChanged(boolean)(boolean skipSilenceEnabled)` Called when skipping silences is enabled or disabled. |
| `abstract void` | `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink.Listener#onUnderrun(int,long,long)( int bufferSize, long bufferSizeMs, long elapsedSinceLastFeedMs )` Called when the audio sink runs out of data. |

## Public methods

### onAudioCapabilitiesChanged

```
default void onAudioCapabilitiesChanged()
```

Called when audio capabilities changed.

### onAudioSessionIdChanged

```
default void onAudioSessionIdChanged(int audioSessionId)
```

Called when the audio session ID changed internally.

The audio sink will ignore new externally set audio session IDs until this ID has been acknowledged with `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink#setAudioSessionId(int)`.

| Parameters |
|---|---|
| `int audioSessionId` | The new audio session ID. |

### onAudioSinkError

```
default void onAudioSinkError(Exception audioSinkError)
```

Called when `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink` has encountered an error.

If the sink writes to a platform `https://developer.android.com/reference/android/media/AudioTrack.html`, this will called for all `https://developer.android.com/reference/android/media/AudioTrack.html` errors.

This method being called does not indicate that playback has failed, or that it will fail. The player may be able to recover from the error (for example by recreating the AudioTrack, possibly with different settings) and continue. Hence applications should *not* implement this method to display a user visible error or initiate an application level retry (`https://developer.android.com/reference/androidx/media3/common/Player.Listener#onPlayerError(androidx.media3.common.PlaybackException)` is the appropriate place to implement such behavior). This method is called to provide the application with an opportunity to log the error if it wishes to do so.

Fatal errors that cannot be recovered will be reported wrapped in a `https://developer.android.com/reference/androidx/media3/exoplayer/ExoPlaybackException` by `https://developer.android.com/reference/androidx/media3/common/Player.Listener#onPlayerError(androidx.media3.common.PlaybackException)`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/lang/Exception.html audioSinkError` | The error that occurred. Typically an `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink.InitializationException`, a `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink.WriteException`, or an `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink.UnexpectedDiscontinuityException`. |

### onAudioTrackInitialized

```
default void onAudioTrackInitialized(AudioSink.AudioTrackConfig audioTrackConfig)
```

Called when an `https://developer.android.com/reference/android/media/AudioTrack.html` has been initialized.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink.AudioTrackConfig audioTrackConfig` | The `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink.AudioTrackConfig` of the initialized `https://developer.android.com/reference/android/media/AudioTrack.html`. |

### onAudioTrackReleased

```
default void onAudioTrackReleased(AudioSink.AudioTrackConfig audioTrackConfig)
```

Called when an `https://developer.android.com/reference/android/media/AudioTrack.html` has been released.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink.AudioTrackConfig audioTrackConfig` | The `https://developer.android.com/reference/androidx/media3/exoplayer/audio/AudioSink.AudioTrackConfig` of the released `https://developer.android.com/reference/android/media/AudioTrack.html`. |

### onOffloadBufferEmptying

```
default void onOffloadBufferEmptying()
```

Called when the offload buffer has been partially emptied.

### onOffloadBufferFull

```
default void onOffloadBufferFull()
```

Called when the offload buffer has been filled completely.

### onPositionAdvancing

```
default void onPositionAdvancing(long playoutStartSystemTimeMs)
```

Called when the audio sink's position has increased for the first time since it was last paused or flushed.

| Parameters |
|---|---|
| `long playoutStartSystemTimeMs` | The approximate derived `https://developer.android.com/reference/java/lang/System.html#currentTimeMillis()` at which playout started. Only valid if the audio track has not underrun. |

### onPositionDiscontinuity

```
abstract void onPositionDiscontinuity()
```

Called when the audio sink handles a buffer whose timestamp is discontinuous with the last buffer handled since it was reset.

### onSilenceSkipped

```
default void onSilenceSkipped()
```

Called when a period of silence has been skipped.

### onSkipSilenceEnabledChanged

```
abstract void onSkipSilenceEnabledChanged(boolean skipSilenceEnabled)
```

Called when skipping silences is enabled or disabled.

| Parameters |
|---|---|
| `boolean skipSilenceEnabled` | Whether skipping silences is enabled. |

### onUnderrun

```
abstract void onUnderrun(
    int bufferSize,
    long bufferSizeMs,
    long elapsedSinceLastFeedMs
)
```

Called when the audio sink runs out of data.

An audio sink implementation may never call this method (for example, if audio data is consumed in batches rather than based on the sink's own clock).

| Parameters |
|---|---|
| `int bufferSize` | The size of the sink's buffer, in bytes. |
| `long bufferSizeMs` | The size of the sink's buffer, in milliseconds, if it is configured for PCM output. `https://developer.android.com/reference/androidx/media3/common/C#TIME_UNSET()` if it is configured for encoded audio output, as the buffered media can have a variable bitrate so the duration may be unknown. |
| `long elapsedSinceLastFeedMs` | The time since the sink was last fed data, in milliseconds. |