Low-Level API
Direct session access for advanced use cases like custom audio processing pipelines.
Recording session
val session = SystemAudioSystem.createRecordingSession()
session.start()
delay(5.seconds)
session.stop()
val audioFlow = session.audioFlow.value
val recording = AudioRecording.fromAudioFlow(audioFlow!!)
You can request a specific audio format. The platform will try to honor it, falling back to a supported format if necessary:
val session = SystemAudioSystem.createRecordingSession(
requestedFormat = AudioFormat(
sampleRate = 16000,
channels = Channels.Mono,
encoding = SampleEncoding.PcmInt(IntBitDepth.Sixteen)
)
)
Playback session
val session = SystemAudioSystem.createPlaybackSession()
session.load(audioFlow)
session.play()
session.state.first { it is AudioPlaybackSession.State.Finished }
session.stop()
Live processing
Process audio in real-time while recording:
val session = SystemAudioSystem.createRecordingSession()
session.start()
session.audioFlow.value?.collect { chunk ->
val amplitude = calculateRMS(chunk)
updateWaveform(amplitude)
}
AudioFlow
val audioFlow = AudioFlow(
format = AudioFormat(
sampleRate = 44100,
channels = Channels.Mono,
encoding = SampleEncoding.PcmInt(IntBitDepth.Sixteen)
),
data = flow { emit(chunk) }
)
SystemAudioSystem
val inputs = SystemAudioSystem.listInputDevices()
val outputs = SystemAudioSystem.listOutputDevices()
val recordingSession = SystemAudioSystem.createRecordingSession(
requestedDevice = device,
requestedFormat = AudioQuality.Voice.format
)
val playbackSession = SystemAudioSystem.createPlaybackSession(device)
Last modified: 04 April 2026