AudioSessionManager

actual object AudioSessionManager

Android implementation of AudioSessionManager.

Manages AudioFocus for coordinated player/recorder usage.

expect object AudioSessionManager

Cross-platform audio session manager (ADR-016).

Coordinates audio session/focus for player and recorder to work together. Without coordination, iOS AVAudioSession and Android AudioFocus race conditions cause silent playback or dropped recordings.

Quick Start

Kotlin

AudioSessionManager.configure(AudioMode.PLAY_AND_RECORD, echoCancellation = true)

AudioSessionManager.addFocusListener(object : AudioFocusListener {
override fun onFocusGained() { player.play() }
override fun onFocusLost(transient: Boolean) { player.pause() }
override fun onDuck() { player.setVolume(0.3f) }
})

AudioSessionManager.deactivate()

Swift

AudioSessionManager.configure(mode: .playAndRecord, echoCancellation: true)
// On iOS, also exposes hardwareSampleRate for ADR-017 passthrough
let hwRate = AudioSessionManager.hardwareSampleRate

See also

Uses AudioSessionManager for playback session

Uses AudioSessionManager for recording session

Playback / Recording / PlayAndRecord modes

actual object AudioSessionManager

iOS implementation of AudioSessionManager.

Manages AVAudioSession configuration for coordinated player/recorder usage.

actual object AudioSessionManager

Desktop-JVM audio session manager. The desktop OS audio stack has no app-level audio-session/focus concept (that's a mobile notion, ADR-016), so there is no session to race: configure just records the mode and reports active. Focus listeners are tracked for contract parity but never fire (no system focus events on desktop). System AEC and shared session ids are mobile-only.

Properties

Link copied to clipboard
actual val currentMode: AudioMode?
expect val currentMode: AudioMode?

Current active mode, or null if not configured.

actual val currentMode: AudioMode?
actual val currentMode: AudioMode?
Link copied to clipboard

The hardware's preferred sample rate for audio recording.

Link copied to clipboard
actual val isActive: Boolean
expect val isActive: Boolean

Whether audio session is currently active.

actual val isActive: Boolean
actual val isActive: Boolean
Link copied to clipboard

AEC is not currently supported on Android for singing/music use cases.

Check if acoustic echo cancellation (AEC) is available on this device.

iOS always supports AEC through VoiceChat mode (all versions) or setPrefersEchoCancelledInput (iOS 18.2+).

Functions

Link copied to clipboard
actual fun addFocusListener(listener: AudioFocusListener)
expect fun addFocusListener(listener: AudioFocusListener)

Add listener for audio focus changes.

actual fun addFocusListener(listener: AudioFocusListener)
actual fun addFocusListener(listener: AudioFocusListener)
Link copied to clipboard
actual fun configure(mode: AudioMode, echoCancellation: Boolean): Boolean
expect fun configure(mode: AudioMode, echoCancellation: Boolean = false): Boolean

Configure audio session for the specified mode.

actual fun configure(mode: AudioMode, echoCancellation: Boolean): Boolean
actual fun configure(mode: AudioMode, echoCancellation: Boolean): Boolean
Link copied to clipboard
actual fun deactivate()
expect fun deactivate()

Deactivate audio session and release focus.

actual fun deactivate()
actual fun deactivate()
Link copied to clipboard
actual fun getAudioSessionId(): Int
expect fun getAudioSessionId(): Int

Get the shared audio session ID for coordinating player and recorder.

actual fun getAudioSessionId(): Int
actual fun getAudioSessionId(): Int
Link copied to clipboard

Remove focus listener.

actual fun removeFocusListener(listener: AudioFocusListener)