docs.rs failed to build flexaudio-0.3.0
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
flexaudio
Flexible, cross-platform audio capture for Rust. Capture from microphones, system output (loopback), individual processes, and microphone + system mix on Linux, Windows, and macOS through one unified API.
use ;
let mut stream = open?;
stream.start?;
while let Some = stream.poll_chunk
stream.stop;
# Ok::
Capability matrix
| Source | Linux | Windows | macOS |
|---|---|---|---|
| Microphone | ✅ cpal/ALSA | ✅ cpal/WASAPI | ✅ cpal/CoreAudio |
| System output | ✅ PipeWire | ✅ WASAPI loopback | ✅ CoreAudio taps |
| Per-process | ✅ PipeWire | ✅ WASAPI process | ✅ CoreAudio taps |
Highlights
open(StreamConfig)selects the right backend by source + OS.Stream::poll_chunk/poll_event— simple pull loop; no callbacks required.Stream::switch_source— hot-swap source without stopping the stream.devices()enumerates devices;watch_devices()reports hotplug notifications on Linux via PipeWire. Windows/macOS return a no-op watcher.processes()lists audio output session/stream owners on Linux/Windows and Core Audio processes on macOS, including input-only processes. Idle/stopped processes are included and the caller is excluded; usepidastarget_pidfor capture andis_output_activeto check current playback.SourceKind::Mixcombines mic + system audio. Select each side withmix_mic_device_id/mix_system_device_id(Noneuses defaults), and setmix_mic_gain/mix_system_gainbefore mixing;gainapplies afterward.device_idis ignored for Mix.exclude_pidscombines withexclude_selffor system capture and the system side of Mix. Windows excludes one process-tree root (self whenexclude_selfis true, otherwise the first PID); every entry must equal that root, and distinct PIDs are rejected. macOS resolves audio objects once at start and honors device selection. Linux matches exact PIDs (application.process.idfor pulse-proxied streams,pipewire.sec.pidfor native clients), without descendants. Linux and Windows ignore system-device selection during exclusion.- Output is normalized interleaved
f32at a sample rate / channel count you choose (two-stage resampling internally).
Install
Permissions
Audio capture requires user consent: macOS TCC (kTCCServiceAudioCapture, add
NSAudioCaptureUsageDescription to Info.plist), the Windows Microphone privacy
setting, and a running PipeWire session on Linux for system/process capture. See
the workspace README.
On macOS, system/process loopback (Core Audio process taps) requires macOS 14.4 or later.
MSRV
Rust 1.85.
License
MIT © 2026 tubome / Studio Sadola. Third-party notices:
THIRD_PARTY_NOTICES.md.