Package-level declarations

Types

Link copied to clipboard
Link copied to clipboard
class AndroidAudioRecordingSession(context: Context, requestedDevice: AudioDevice.Input?, format: AudioFormat = DefaultAndroidRecordingAudioFormat) : BaseAudioRecordingSession

Android implementation of BaseAudioRecordingSession.

Link copied to clipboard
Link copied to clipboard
sealed interface AudioDevice

Represents an audio device, sealed for type safety between inputs and outputs.

Link copied to clipboard
sealed class AudioError : Throwable

Sealed hierarchy representing all possible audio-related errors.

Link copied to clipboard
class AudioFlow(val format: AudioFormat, data: Flow<ByteArray>) : Flow<ByteArray>

A typed stream of raw PCM audio: an AudioFormat paired with a Flow of ByteArray chunks.

Link copied to clipboard
data class AudioFormat(val sampleRate: Int, val channels: Channels, val encoding: SampleEncoding)

Canonical audio format

Link copied to clipboard
sealed interface AudioFormatSupport

Represents the knowability of a device's supported audio formats.

Link copied to clipboard

Represents an active playback session.

Link copied to clipboard

Simplified audio quality presets for common use cases.

Link copied to clipboard

Represents a recorded audio clip with its format metadata.

Link copied to clipboard

Represents an active recording session.

Link copied to clipboard
sealed interface AudioSessionState

Unified state machine for both recording and playback sessions.

Link copied to clipboard
sealed interface AudioSystem

Manages audio devices and sessions.

Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
abstract class AVAudioRecordingSession(format: AudioFormat = DefaultAppleRecordingAudioFormat) : BaseAudioRecordingSession
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard

An abstract base class for AudioRecordingSession that handles the logic for providing a live "hot" flow during recording, and a replayable "cold" flow after the recording is finished.

Link copied to clipboard

Channels: number + layout if you need it later.

Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard

IMPORTANT: You must add the NSMicrophoneUsageDescription key to your Info.plist.

Link copied to clipboard
Link copied to clipboard
class IosAudioRecordingSession(requestedDevice: AudioDevice.Input?, format: AudioFormat = DefaultAppleRecordingAudioFormat) : AVAudioRecordingSession

IOS implementation for AVAudioRecordingSession.

Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
class JvmAudioRecordingSession(device: AudioDevice.Input, format: AudioFormat = DefaultJvmRecordingAudioFormat, warmupMillis: Int = JvmRecordingWarmupMillis) : BaseAudioRecordingSession

JVM implementation for AudioRecordingSession.

Link copied to clipboard
object Kodio

Main entry point for the Kodio audio library.

Link copied to clipboard
sealed class MacosAudioObject
Link copied to clipboard

IMPORTANT: Add NSMicrophoneUsageDescription to your Info.plist (macOS).

Link copied to clipboard
class MacosAudioPlaybackSession(requestedDevice: AudioDevice.Output? = null, bufferDurationSec: Double = 0.05, bufferCount: Int = 5) : BaseAudioPlaybackSession

Mac OS implementation for AudioPlaybackSession using Core Audio AudioQueue (output).

Link copied to clipboard
sealed class MacosAudioQueue<S : Any>
Link copied to clipboard
Link copied to clipboard
class MacosAudioRecordingSession(requestedDevice: AudioDevice.Input?, requestedFormat: AudioFormat? = requestedDevice?.formatSupport?.defaultFormat, bufferDurationSec: Double = 0.05, bufferCount: Int = 5) : BaseAudioRecordingSession

macOS implementation for AVAudioRecordingSession using AudioQueue input.

Link copied to clipboard
class Player

High-level wrapper around AudioPlaybackSession providing a simplified API.

Link copied to clipboard

Configuration for creating a Player.

Link copied to clipboard
class Recorder

High-level wrapper around AudioRecordingSession providing a simplified API.

Link copied to clipboard

Configuration for creating a Recorder.

Link copied to clipboard
sealed interface SampleEncoding

Audio sample encoding. No “signed/unsigned” for floats anymore.

Link copied to clipboard

How samples are laid out in memory.

Link copied to clipboard
Link copied to clipboard

Web playback session. Output device selection via AudioContext.setSinkId is deferred: the API is Chrome/Edge-only as of 2026 (unsupported in Firefox and Safari). Adding it would require feature-detected progressive enhancement and a device-passing API on the web playback path, which does not exist yet. AudioError.DeviceSelectionUnsupported remains the fallback behavior.

Link copied to clipboard
class WebAudioRecordingSession(device: AudioDevice.Input?, format: AudioFormat = DefaultWebRecordingAudioFormat) : BaseAudioRecordingSession
Link copied to clipboard

Properties

Link copied to clipboard

Check if a state allows starting a new operation.

Link copied to clipboard

Platform default recording format on Android: 48 kHz, mono, signed 16-bit little-endian interleaved PCM (same as DefaultRecordingInt16).

Link copied to clipboard

Platform default recording format on Apple platforms: 48 kHz, mono, signed 16-bit little-endian interleaved PCM (same as DefaultRecordingInt16).

Link copied to clipboard

Default warmup window applied to JavaSound captures so the silent priming frames a TargetDataLine produces on the first read are dropped before we start emitting audio downstream.

Link copied to clipboard

Default float recording format: 48 kHz, mono, 32-bit float interleaved PCM.

Link copied to clipboard

Default recording format: 48 kHz, mono, signed 16-bit little-endian interleaved PCM.

Link copied to clipboard

Check if a state represents an active session.

Link copied to clipboard

Check if a state represents a terminal state (Complete or Failed).

Link copied to clipboard
Link copied to clipboard
actual val microphonePermissionDescriptor: PermissionDescriptor
actual val microphonePermissionDescriptor: PermissionDescriptor
expect val microphonePermissionDescriptor: PermissionDescriptor
Link copied to clipboard

Android implementation for AudioSystem. IMPORTANT: You must add the RECORD_AUDIO permission to your AndroidManifest.xml and handle the runtime permission request in your application.

JS implementation of the AudioSystem using the Web Audio API. This requires a secure context (HTTPS) to function in a browser.

JVM implementation for AudioSystem.

JS implementation of the AudioSystem using the Web Audio API. This requires a secure context (HTTPS) to function in a browser.

Functions

Link copied to clipboard
fun NativePlacement.allocASBD(format: AudioFormat): AudioStreamBasicDescription
Link copied to clipboard
actual fun createAudioContextOptions(latencyHint: AudioContextLatencyCategory, sampleRate: Int): AudioContextOptions
actual fun createAudioContextOptions(latencyHint: AudioContextLatencyCategory, sampleRate: Int): AudioContextOptions
expect fun createAudioContextOptions(latencyHint: AudioContextLatencyCategory, sampleRate: Int): AudioContextOptions
Link copied to clipboard
actual fun createAudioWorkletNode(context: BaseAudioContext, name: String): AudioWorkletNode
actual fun createAudioWorkletNode(context: BaseAudioContext, name: String): AudioWorkletNode
expect fun createAudioWorkletNode(context: BaseAudioContext, name: String): AudioWorkletNode
Link copied to clipboard
actual fun createCodeBlobUrl(code: String): String
actual fun createCodeBlobUrl(code: String): String
expect fun createCodeBlobUrl(code: String): String
Link copied to clipboard
actual fun createMediaStreamConstraints(audio: MediaTrackConstraints): MediaStreamConstraints
actual fun createMediaStreamConstraints(audio: MediaTrackConstraints): MediaStreamConstraints
expect fun createMediaStreamConstraints(audio: MediaTrackConstraints): MediaStreamConstraints
Link copied to clipboard
actual fun createMediaTrackConstraints(deviceId: String?, sampleRate: Int, sampleSize: Int, channelCount: Int): MediaTrackConstraints
actual fun createMediaTrackConstraints(deviceId: String?, sampleRate: Int, sampleSize: Int, channelCount: Int): MediaTrackConstraints
expect fun createMediaTrackConstraints(deviceId: String?, sampleRate: Int, sampleSize: Int, channelCount: Int): MediaTrackConstraints
Link copied to clipboard
actual fun <B : ArrayBufferLike> Float32Array<B>.encodeAs16BitPcmByteArray(): ByteArray
actual fun <B : ArrayBufferLike> Float32Array<B>.encodeAs16BitPcmByteArray(): ByteArray
expect fun <B : ArrayBufferLike> Float32Array<B>.encodeAs16BitPcmByteArray(): ByteArray
Link copied to clipboard
fun Kodio.initialize(activity: Activity)

Initialize Kodio with an Activity.

fun Kodio.initialize(application: Application)

Initialize Kodio with an Application instance.

fun Kodio.initialize(context: Context)

Android-specific Kodio initialization.

Link copied to clipboard
fun Kodio.onRequestPermissionsResult(requestCode: Int, grantResults: IntArray)

Forward the permission callback to Kodio.

Link copied to clipboard
fun AudioFormat.toAVAudioFormat(): AVAudioFormat

Converts this common AudioFormat to an AVAudioFormat instance.

Link copied to clipboard
fun AVAudioFormat.toCommonAudioFormat(): AudioFormat

Converts this AVAudioFormat to a common AudioFormat instance.

Link copied to clipboard
fun <T : JsAny?> JsArray<T>.toList(): List<T>
Link copied to clipboard

Extension to convert legacy playback session states to the unified state.

Extension to convert legacy recording session states to the unified state.

Link copied to clipboard
inline fun <T> Player.use(block: (Player) -> T): T

Extension for using Player with Kotlin's use pattern. Ensures proper cleanup even if an exception occurs.

inline fun <T> Recorder.use(block: (Recorder) -> T): T

Extension for using Recorder with Kotlin's use pattern. Ensures proper cleanup even if an exception occurs.