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!!)
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(device)
val playbackSession = SystemAudioSystem.createPlaybackSession(device)
Last modified: 13 January 2026