API Reference
Quick reference for all Kodio APIs.
This page is a hand-written quick reference. For the full generated API documentation (all classes, functions, and KDoc comments), see the KDoc API Reference.
Kodio
// Recording
suspend fun record(duration: Duration, quality: AudioQuality = Default, device: Input? = null): AudioRecording
suspend fun <T> record(quality: AudioQuality = Default, device: Input? = null, block: suspend (Recorder) -> T): T
fun recorder(quality: AudioQuality = Default, device: Input? = null): Recorder
// Playback
suspend fun play(recording: AudioRecording, device: Output? = null)
suspend fun <T> play(recording: AudioRecording, device: Output? = null, block: suspend (Player) -> T): T
suspend fun play(audioFlow: AudioFlow, device: Output? = null)
fun player(device: Output? = null): Player
// Devices (suspend)
suspend fun listInputDevices(): List<AudioDevice.Input>
suspend fun listOutputDevices(): List<AudioDevice.Output>
// Permissions
val microphonePermission: AudioPermissionManager
Recorder
recorder.start()
recorder.stop()
recorder.toggle()
recorder.reset()
recorder.release()
suspend fun getRecording(): AudioRecording?
val isRecording: Boolean
val hasRecording: Boolean
val liveAudioFlow: Flow<ByteArray>?
val audioFlow: AudioFlow?
recorder.use { r -> ... }
Player
suspend fun load(recording: AudioRecording)
suspend fun loadAudioFlow(audioFlow: AudioFlow)
player.start()
player.pause()
player.resume()
player.stop()
player.toggle()
player.release()
suspend fun awaitComplete()
val isPlaying: Boolean
val isPaused: Boolean
val isReady: Boolean
val isFinished: Boolean
player.use { p -> ... }
AudioRecording
suspend fun play()
suspend fun saveAs(path: Path, fileFormat: AudioFileFormat = Wav)
fun toByteArray(): ByteArray
fun asFlow(defensiveCopy: Boolean = true): Flow<ByteArray>
val format: AudioFormat
val calculatedDuration: Duration
val sizeInBytes: Long
// Raw PCM
fromBytes(format: AudioFormat, data: ByteArray)
fromChunks(format: AudioFormat, chunks: List<ByteArray>, duration: Duration? = null)
fromAudioFlow(audioFlow: AudioFlow, duration: Duration? = null)
// Container files (space.kodio.core.io.files)
fromBytes(bytes: ByteArray, fileFormat: AudioFileFormat = Wav)
fromSource(source: Source, fileFormat: AudioFileFormat = Wav)
fromFile(path: Path, fileSystem: FileSystem = SystemFileSystem)
AudioQuality
AudioQuality.Voice // 16kHz, Mono
AudioQuality.Standard // 44.1kHz, Mono (default)
AudioQuality.High // 48kHz, Stereo
AudioQuality.Lossless // 96kHz, Stereo, 24-bit
AudioError
AudioError.PermissionDenied
AudioError.DeviceNotFound(deviceId?)
AudioError.FormatNotSupported(format?)
AudioError.DeviceError(errorMessage, errorCause?)
AudioError.NotInitialized
AudioError.AlreadyRecording
AudioError.AlreadyPlaying
AudioError.NoRecordingData
AudioError.DeviceSelectionUnsupported(kind)
AudioError.Unknown(originalCause)
Compose
rememberRecorderState(quality?, device?, liveWaveformGain?, onRecordingComplete?)
rememberPlayerState(device?, onPlaybackComplete?)
rememberPlayerState(recording, device?, onPlaybackComplete?)
AudioWaveform(amplitudes, modifier?, style?, colors?, progress?, onProgressChange?, animate?, animationSpec?)
Material 3
RecordAudioButton(modifier?, state?, showWaveform?)
PlayAudioButton(recording, modifier?, state?, showWaveform?)
AudioPermissionButton(state, modifier?)
ErrorDialog(error, onDismiss)
Transcription
OpenAIWhisperEngine(apiKey, model?, httpClient?, chunkDurationSeconds?, endpointUrl?, additionalHeaders?)
audioFlow.transcribe(engine, config = TranscriptionConfig.Default)
recorder.transcribe(engine, config = TranscriptionConfig.Default)
TranscriptionConfig(language = "en-US")
TranscriptionConfig.Default
Last modified: 06 July 2026