cpal
Low-level cross-platform audio I/O library.
0.18.2
18M downloads/mo
#2177 most downloaded on crates.io
RustAudio/cpal
What this package is like to depend on
Last release 7 days ago
16 Aug 2026
Release timing varies
gaps range from 9 days to 1.3 years
Nearly every release is documented
notes for 79 of 79 stable releases
1 version withdrawn
withdrawn after publishing
12 years old
80 releases · first in 2014
7 releases in the last 12 months
see the full history below
Release timeline
80 releases · Dec 2014 to Aug 2026Releases
latest 60 of 80-
0.18.216 Aug 2026Release notes
Open source →Added
- AAudio: Xruns are now reported as
ErrorKind::Xrun. - CoreAudio: Xruns are now reported as
ErrorKind::Xrun. - PipeWire: Xruns are now reported as
ErrorKind::Xrun. - WASAPI: Capture xruns are now reported as
ErrorKind::Xrun.
Changed
- BSD: Clarify that
realtime-dbushas no effect there. - CoreAudio: Bump
objc2-core-foundationdependency lower bound to 0.3.1. - iOS: Timestamps now include hardware latency and update when the audio route changes.
- JACK: Timestamps now include port latency.
- Linux: Clarify that
realtimealone is a no-op withoutrealtime-dbus. - PipeWire: Devices with multiple ports now get distinct, localized, per-port names.
- WASAPI: The
windowsandwindows-coredependencies are now both pinned to 0.62.
Fixed
- Timestamps now stay monotonic across device and graph changes.
- ALSA: A nonzero but sub-millisecond stream timeout is no longer treated as a non-blocking poll.
- ALSA: Fix compilation on FreeBSD, DragonFly, and NetBSD.
- ASIO: Fix duplex streams silently dropping audio when built from separate
Devicehandles. - AudioWorklet: Fix
Streamoperations to work when called from any thread. - AudioWorklet: Fix stale audio output when a data callback wrote a partial buffer.
- CoreAudio: Fix stale audio output when a data callback wrote a partial buffer.
- CoreAudio: Default-output streams now report xrun status.
- iOS: Streams now resume automatically when an audio session interruption ends.
- JACK: Streams with more channels than physical system ports no longer fail to build.
- JACK: Channel enumeration is no longer capped at the physical system port count.
- JACK:
Device::idno longer embeds the process ID, soDeviceIdis now stable across application restarts. - PipeWire: Fix streams starting audio before
play()is called. - PipeWire: Fix real-time promotion blocking the audio callback thread on Linux.
- PipeWire: Fix rtkit burst limit errors from repeated real-time promotion on quantum jitter.
- PipeWire: Fix 24-bit sample format mapping.
- PipeWire: Nodes with an
/Internalmedia class are now enumerated as devices. - PipeWire: Streams for a specific device no longer auto-reroute if it disappears.
- PipeWire: Build on 32-bit targets without native 64-bit atomics.
- PulseAudio:
NoDataerrors are no longer misreported as buffer xruns. - PulseAudio: Build on 32-bit targets without native 64-bit atomics.
- visionOS: The CoreAudio backend now builds.
- WASAPI:
Stream::drop,play, andpauseno longer panic when the device is lost. - WASAPI: Output streams no longer reject formats that the built-in resampler can convert.
- WASAPI: Fix 24-bit samples not being packed into the upper bits of their sample container.
- WASAPI: Reported buffer sizes are no longer off by one frame.
- WASAPI: Default device changes no longer report
DeviceChanged, which wrongly implied the stream had rerouted automatically. - WebAudio: Fix stale audio output when a data callback wrote a partial buffer.
- WebAudio: Fix unsound
Send + SynconStreamwhen compiled with+atomics. - WebAudio: Fix
Host::is_available()always returningtrue, even in non-window contexts.
Thanks to Our Contributors
14 people contributed to this release, 9 of them for the first time: Andreas (@sandreas), Benoît Rouleau (@benface), @dheijl, Edwin Löffler (@edwloef), Erwan Legrand (@ErwanLegrand), @Jaxx497, Kpqi5858 (@kpqi5858), LastExceed (@LastExceed), Mat Silverstein (@silverstein), @MordechaiHadad, Nicola Vitale (@nivit), Nicolas Franco Gomez (@nico-franco-gomez), SkeletonGamer (@SkeletonGamer), and @the-drunk-coder. Welcome aboard, and thank you all!
Release notes
Open source →Added
- AAudio: Xruns are now reported as
ErrorKind::Xrun. - CoreAudio: Xruns are now reported as
ErrorKind::Xrun. - PipeWire: Xruns are now reported as
ErrorKind::Xrun. - WASAPI: Capture xruns are now reported as
ErrorKind::Xrun.
Changed
- BSD: Clarify that
realtime-dbushas no effect there. - CoreAudio: Bump
objc2-core-foundationdependency lower bound to 0.3.1. - iOS: Timestamps now include hardware latency and update when the audio route changes.
- JACK: Timestamps now include port latency.
- Linux: Clarify that
realtimealone is a no-op withoutrealtime-dbus. - PipeWire: Devices with multiple ports now get distinct, localized, per-port names.
- WASAPI: The
windowsandwindows-coredependencies are now both pinned to 0.62.
Fixed
- Timestamps now stay monotonic across device and graph changes.
- ALSA: A nonzero but sub-millisecond stream timeout is no longer treated as a non-blocking poll.
- ALSA: Fix compilation on FreeBSD, DragonFly, and NetBSD.
- ASIO: Fix duplex streams silently dropping audio when built from separate
Devicehandles. - AudioWorklet: Fix
Streamoperations to work when called from any thread. - AudioWorklet: Fix stale audio output when a data callback wrote a partial buffer.
- CoreAudio: Default-output streams now report xrun status.
- CoreAudio: Fix stale audio output when a data callback wrote a partial buffer.
- iOS: Streams now resume automatically when an audio session interruption ends.
- JACK: Streams with more channels than physical system ports no longer fail to build.
- JACK: Channel enumeration is no longer capped at the physical system port count.
- JACK:
Device::idno longer embeds the process ID, soDeviceIdis now stable across application restarts. - PipeWire: Fix streams starting audio before
play()is called. - PipeWire: Fix rtkit burst limit errors from repeated real-time promotion on quantum jitter.
- PipeWire: Fix real-time promotion blocking the audio callback thread on Linux.
- PipeWire: Fix 24-bit sample format mapping.
- PipeWire: Nodes with an
/Internalmedia class are now enumerated as devices. - PipeWire: Streams for a specific device no longer auto-reroute if it disappears.
- PipeWire: Build on 32-bit targets without native 64-bit atomics.
- PulseAudio:
NoDataerrors are no longer misreported as buffer xruns. - PulseAudio: Build on 32-bit targets without native 64-bit atomics.
- visionOS: The CoreAudio backend now builds.
- WASAPI: Default device changes no longer report
DeviceChanged, which wrongly implied the stream had rerouted automatically. - WASAPI: Reported buffer sizes are no longer off by one frame.
- WASAPI:
Stream::drop,play, andpauseno longer panic when the device is lost. - WASAPI: Capture streams no longer report a spurious xrun on the first buffer after starting.
- WASAPI: Output streams no longer reject formats that the built-in resampler can convert.
- WASAPI: Fix 24-bit samples not being packed into the upper bits of their sample container.
- WebAudio: Fix stale audio output when a data callback wrote a partial buffer.
- WebAudio: Fix unsound
Send + SynconStreamwhen compiled with+atomics. - WebAudio: Fix
Host::is_available()always returningtrue, even in non-window contexts.
- AAudio: Xruns are now reported as
-
0.18.107 Jun 2026Release notes
Open source →A quick follow-up to 0.18.0 primarily to fix the docs.rs build failure.
docs.rs: Excludedpipewire, whose system dependency isn't available in that sandboxed build environment.- WASM: Fixed the
audioworkletfeature failing to compile onwasm32-wasip1and other non-browserwasm32targets.
No API or behavioral changes.
Links
Release notes
Open source →Fixed
- Exclude
pipewirefrom thedocs.rsbuild; system dependency not available in its environment. - Fix
wasm-bindgencausing compile errors on non-browserwasm32targets such aswasm32-wasip1.
-
0.18.006 Jun 2026Release notes
Open source →Hey everyone! cpal 0.18.0 is out, bringing two long-requested native Linux backends, a unified error API, and accurate timestamps across every platform.
What's New
Native PipeWire and PulseAudio
Two new first-class backends join the Linux and BSD lineup:
- PipeWire
- PulseAudio
Enable them with the
pipewireandpulseaudioCargo features. When multiple backends are compiled in, cpal selects the best available one at runtime: PipeWire > PulseAudio > ALSA.Unified Error API
All per-operation error enums (
DevicesError,BuildStreamError,StreamError, etc.) are replaced by a singlecpal::Errorwith akind()getter:match device.default_output_config() { Err(e) => match e.kind() { cpal::ErrorKind::DeviceNotAvailable => { /* ... */ } cpal::ErrorKind::DeviceBusy => { /* retry */ } _ => { /* ... */ } } }
Two new error kinds make previously indistinguishable cases actionable:
DeviceBusy(EBUSY/EAGAINis retryable) andPermissionDeniedfor OS-level access denials. See the upgrading guide for the mapping table.Accurate Timestamps and A/V Sync
Timestamps previously reflected when the callback fired rather than when audio would actually reach hardware. This release corrects that across every backend:
- AAudio: pipeline buffer depth accounted for; fallback to zero on error fixed
- ALSA:
LinkSynchronizedhardware cross-timestamps for reduced jitter on supported devices - ASIO: driver-reported hardware latency included; re-queried on
kAsioLatenciesChanged - CoreAudio: device latency and safety offset included
- JACK: precise hardware cycle deadline; input capture timestamps were previously using callback execution time
- WASAPI: hardware pipeline latency included
- WebAudio: base and output latency included
A new
StreamTrait::now()method lets you query the stream's clock from outside the callback for A/V sync: read the audio clock at any point and correlate it with your video timeline.48 kHz is the New Default
default_input_config()anddefault_output_config()now prefer 48 kHz, then 44.1 kHz, on all backends. Defaulting to 44.1 kHz meant cpal's chosen rate often didn't match the hardware's preferred rate. Pin it explicitly if you need 44.1 kHz.New API
StreamTrait::buffer_size()queries the stream's current buffer sizeSupportedStreamConfigRange::try_with_standard_sample_rate()/with_standard_sample_rate()snaps to 48 kHz or 44.1 kHz from a supported range
Platform Improvements
-
ALSA:
device_by_id()now accepts PCM shorthand names likehw:0,0andplughw:foo; streams attempt to recover after system suspend; capture streams no longer hang on overruns; backward-stepping timestamps during startup and xrun recovery are fixed. -
ASIO:
collect()on the device iterator no longer stops after the first device; device enumeration and stream creation now work correctly when called from spawned threads; distortion from drivers that fire the buffer callback multiple times per cycle is fixed. -
CoreAudio: the physical stream format is now set directly on the hardware device rather than relying on the HAL mixer; user-specified timeouts are now respected when building a stream.
-
JACK: buffer size changes no longer fire an error callback but resizes internal buffers, avoiding unnecessary stream rebuilds; server shutdown now surfaces as
ErrorKind::DeviceNotAvailable. -
WASAPI: device names now prefer
FriendlyNameoverDeviceDesc, so you see the readable name from system settings; default streams automatically reroute when the system default device changes.
...and a lot more. The changelog has the full picture.
Breaking Changes
- Streams now require an explicit
play()call: ALSA, CoreAudio, and JACK previously auto-started streams on creation. If you never calledplay(), your callback will never fire after upgrading. Errortypes unified: match one.kind()instead of per-operation error enums.StreamConfigpassed by value:StreamConfignow implementsCopy; drop the&atbuild_*_streamcall sites.StreamInstantAPI overhauled: aligns withstd::time::Instant. Changeadd/subtochecked_add/checked_sub(or+/-);duration_sincereturnsDuration(saturating), secs/nanos are nowu64.- Default sample rate is now 48 kHz: pin explicitly if you need 44.1 kHz.
- Default sample format heuristics now fully ranked: floats before integers, higher bit-depth before lower; pin
F32explicitly if you were relying on it as the default. - Emscripten host removed: migrate to
wasm32-unknown-unknownwith thewasm-bindgenfeature.
Full details and migration examples in the upgrading guide.
Looking Ahead to v0.19
The design goals are tracked in #1220. Highlights:
- Extension traits: clean access to platform-specific functionality like RAW mode on WASAPI, control panel on ASIO, identifying stream properties on PipeWire, etc.
- Exclusive mode on CoreAudio and WASAPI
- Duplex stream API
- Input streams on WASM: microphone access from the browser
- Stream lifecycle normalization:
play/pausetostart/pause/stopwith a draining stop - Native DSD on WASAPI
BufferSizerefactor with range support
The feature set may change.
Thanks to Our Contributors
25 people contributed to this release, 19 of them for the first time: Access (@Decodetalkers), atlv (@atlv24), Chandler Newman (@csnewman), Colin Marc (@colinmarc), @DanielHabenicht, @dheijl, Edwin Löffler (@edwloef), GorTech (@gortech), Jerry.Wang (@wangjia184), kibaa (@d3d9), Louis Beaumont (@louis030195), Marin (@marin-m), Mat Silverstein (@silverstein), Mike Hilgendorf (@m-hilgendorf), Mikey (@ahdinosaur), Nicolas Franco Gomez (@nico-franco-gomez), osoftware (@osoftware), Raphael Poss (@knz), Seto Elkahfi (@setoelkahfi), Sintel (@Sin-tel), thewh1teagle (@thewh1teagle), Umer Haider (@umerhd), Worik Stanton (@worikgh), and 时光回忆 (@mikai233). Welcome aboard, and thank you all!
A handful of longstanding reports, some dating back to 2019, also got closed out along the way as fixes elsewhere in this release happened to resolve them too. Thanks to the original reporters for filing them and sticking around: @bspot, @JustAnotherCodemonkey, @knappador, Marc-Antoine ARNAUD (@MarcAntoine-Arnaud), @mitchmindtree, MOZGIII (@MOZGIII), Philippe GASSMANN (@zenria), Przemysław Węgrzyn (@codepainters), TG (@tGrothmannFluffy), @the-drunk-coder, and Will (@will3942).
Support the Project
If you find value in cpal, sponsorships are a heartfelt token of appreciation and help cover the costs of building it: music service subscriptions, hardware for cross-platform compatibility, and tooling. Every contribution helps: sponsor me at GitHub.
Links
- Crate Home & README
- Documentation
- Changelog
- Upgrading Guide
- RustAudio Discord (#cpal channel)
Huge thanks to everyone who contributed to this release!
Release notes
Open source →Added
- New
ErrorKindvariants for the unified error type:BackendError(platform error without a specific mapping);DeviceBusy(retryable device access, e.g. EBUSY/EAGAIN);DeviceChanged(audio route changed to another device);InvalidInput(invalid caller-supplied values);PermissionDenied(OS-level access denial);RealtimeDenied(real-time scheduling refused — previously only printed to stderr);ResourceExhausted(OS thread/memory limits);UnsupportedOperation(backend or device does not implement the operation). Devicenow implementsPartialEq,Eq,Hash,Display, andDebugon all backends.realtimefeature for real-time audio thread scheduling without a D-Bus build dependency.StreamTrait::now()to query the current instant on the stream's clock.StreamTrait::buffer_size()to query the stream's current buffer size in frames per callback.SAMPLE_RATE_CD(44100 Hz) andSAMPLE_RATE_48K(48000 Hz) constants.SupportedStreamConfigRange::try_with_standard_sample_rate()andwith_standard_sample_rate()to select 48 kHz or 44.1 kHz from a range.SupportedStreamConfigRange::contains_rate()to test whether a sample rate falls within a range.StreamConfigandSupportedStreamConfignow implementCopy.BufferSizenow implementsDefault(returnsBufferSize::Default).SupportedBufferSizenow implementsDefault(returnsSupportedBufferSize::Unknown).HostTrait::device_by_id()is now backend-dispatched, allowing each host to override the default implementation.- DSD512 sample rates added to the common rate probe list.
- AAudio: Streams now request
PERFORMANCE_MODE_LOW_LATENCYwith therealtimefeature; reportsErrorKind::RealtimeDeniedif not granted. - ALSA:
device_by_id()now accepts PCM shorthand names such ashw:0,0andplughw:foo. - CoreAudio: tvOS target support (Tier 3, requires nightly).
- PipeWire: New host for Linux and BSD via the native PipeWire API.
- PulseAudio: New host for Linux and BSD via the PulseAudio API.
- WASAPI:
F64sample format support.
Changed
- Changed per-operation error types (
DevicesError,SupportedStreamConfigsError, etc.) andHostUnavailableinto a unifiedError/ErrorKind. See UPGRADING.md. DeviceTraitnow requiresPartialEq + Eq + Hash + Debug + Displaywith a stable device ID.DeviceTrait::build_*_stream()now takesStreamConfigby value instead of&StreamConfig.StreamInstantAPI changed and extended to mirrorstd::time::Instant/Duration. See UPGRADING.md for migration details.- Streams no longer start automatically on
build_*_stream(); callplay()explicitly. Previously ALSA, CoreAudio, and JACK auto-started streams on creation. - Default output and input configs now prefer 48 kHz, then 44.1 kHz, then the device maximum. Previously the preferred rate was backend-dependent (typically 44.1 kHz or device maximum).
SupportedStreamConfigRange::cmp_default_heuristicsnow ranks allSampleFormatvariants;F32>F64> descending integer widths. Default configs may now returnI32orI24on high-precision hardware. See UPGRADING.md.- Bump MSRV to 1.85.
DeviceIdfields are now private; construct withDeviceId::new(host, id)and access with.host()/.id(). See UPGRADING.md.audio_thread_priorityfeature renamed torealtime-dbus.DeviceDescription::extended()now returnsimpl Iterator<Item = &str>instead of&[String]. See UPGRADING.md.HostId::name()now returns a more human-friendly name.DeviceDescriptionBuildersetters now acceptimpl AsRef<str>instead ofimpl Into<String>.- AAudio: Channel enumeration extended to 8 channels.
- AAudio: Buffers with default sizes are now dynamically tuned.
- AAudio:
SupportedBufferSizein enumeration is nowUnknown. - AAudio: Device names now include the device type suffix (e.g.
Speaker (Builtin Speaker)). - AAudio:
supported_input_configs()andsupported_output_configs()now return an error for direction-mismatched devices instead of silently returning an empty list. - ALSA: Stream error callback now receives
ErrorKind::DeviceNotAvailableon device disconnection. - ALSA: Callback timestamps use
LinkSynchronizedhardware cross-timestamps for lower jitter on supported devices. - ALSA: Try to resume from hardware after a system suspend.
- ALSA: Loop partial reads and writes to completion.
- ALSA: Polling errors trigger underrun recovery instead of looping.
- ALSA: Prevent reentrancy issues with non-reentrant plugins and devices.
- ALSA: Supported configurations are now enumerated up to 64 channels (AES10 maximum).
- ALSA: The
realtimefeature now skips RT promotion for ineligible PCM types (null, I/O plugins, wrapper types). - ASIO: Timestamps now include driver-reported hardware latency.
- ASIO: Stream error callback now receives
ErrorKind::StreamInvalidatedonkAsioResyncRequestor a sample rate change of 1 Hz or more from the configured rate. - ASIO: Hardware latency is re-queried when the driver reports
kAsioLatenciesChanged. - ASIO:
Device::driver,asio_streams, andcurrent_callback_flagare no longerpub. - AudioWorklet:
BufferSize::Fixednow setsrenderSizeHinton theAudioContext. - AudioWorklet: Sample rates now enumerated as discrete standard rates in the spec-required range of 3-768 kHz.
- CoreAudio: Timestamps now include device latency and safety offset.
- CoreAudio: Physical stream format is now set directly on the hardware device.
- CoreAudio: Stream error callback now receives
ErrorKind::StreamInvalidatedon any sample rate change on macOS, and on iOS on route changes that require a stream rebuild. - CoreAudio: Stream error callback now receives
ErrorKind::DeviceNotAvailableon iOS when media services are lost. - CoreAudio: Stream error callback now receives
ErrorKind::DeviceChangedwhen the system default output device changes, or on iOS when headphones are unplugged. - CoreAudio: User timeouts are now respected when building a stream.
- CoreAudio (iOS):
default_output_config()now prefers stereo over the maximum channel count. - JACK: Timestamps now use the precise hardware deadline.
- JACK: Stream error callback now receives
ErrorKind::DeviceNotAvailableon server shutdown. - JACK: Stream error callback now receives
ErrorKind::RealtimeDeniedonce if the process callback is not running at real-time scheduling priority. - JACK:
Stream::connect_to_system_outputs()andconnect_to_system_inputs()now returnResult<(), Error>and roll back the port graph on failure. - JACK: User timeouts are now respected when building a stream.
- JACK: Buffer size changes no longer invoke the error callback; internal buffers are resized transparently.
- JACK: Default client name now includes the process PID.
- Linux/BSD: Default host priority: PipeWire > PulseAudio > ALSA.
- WASAPI: Default output and input streams now automatically reroute when the system default
device changes; stream error callback receives
ErrorKind::DeviceChanged. - WASAPI: Timestamps now include hardware pipeline latency.
- WASAPI:
FriendlyNameis now preferred as device name overDeviceDesc. - WASAPI:
Device::immdevice()now returnsOption<Audio::IMMDevice>. - WASAPI: Raise
windowsdependency lower bound to 0.61. - WebAudio: Timestamps now include base and output latency.
- WebAudio: Initial buffer scheduling offset now scales with buffer duration.
- WebAudio: Sample rates now enumerated as discrete standard rates in the spec-required range of 3-768 kHz.
Removed
StreamInstant::add()andsub()replaced bychecked_add()/+andchecked_sub()/-.- Removed deprecated
DeviceTrait::name(). - ALSA:
Defaultimplementation forDevice. - ALSA:
AlsaHostis no longer re-exported fromcpal::platform. - Emscripten: Removed broken host; use the WebAudio host instead.
- WASAPI: Removed
U24incorrectly listed as a supported sample format.
Fixed
channels: 0,sample_rate: 0, orBufferSize::Fixed(0)now returnErrorKind::InvalidInputconsistently across all backends (previouslyUnsupportedConfigor a panic).- Output buffers are now zero-filled before the callback runs across all backends.
- Poisoned mutex guards now return
ErrorKind::StreamInvalidatedinstead of panicking (AAudio, ASIO, CoreAudio, JACK, WASAPI). - Fix callbacks firing before
build_*_streamreturns theStreamhandle (ALSA, ASIO, WASAPI). - Fix
buffer_capacity_in_framesinteger overflow for large fixed buffer sizes (AAudio, ALSA). - Fix numeric overflows when constructing
StreamInstant(ASIO, CoreAudio, JACK). - AAudio: Fix panic in device configuration enumeration for pathological channel counts.
- AAudio: Fix thread lock when a stream is dropped before it fully starts.
- AAudio: Fix capture and playback timestamps not accounting for audio pipeline buffer depth, and falling back to zero on error.
- AAudio: Fix
sample_ratevalues abovei32::MAXpanicking. - AAudio: Fix stream errors not forwarded to
error_callback. - AAudio: Return
ErrorKind::BackendErrorinstead of panicking on sample count overflow in the data callback. - ALSA: Fix capture stream hanging or spinning on overruns.
- ALSA: Fix timestamps stepping backward during startup or after xrun recovery.
- ALSA: Fix spurious timestamp and timeout errors during stream startup and polling.
- ALSA: Fix rare panics when dropping the stream is interrupted.
- ALSA: Fix timestamp overflows on 32-bit platforms.
- ALSA: Fix silence template not applied for DSD.
- ALSA: Fix stream corruption on certain drivers with spurious wakeups.
- ALSA: Fix hang when a device raced to an error state without delivering POLLERR.
- ALSA: Fix
supported_configs()reporting buffer size instead of period size, using the same buffer range for all formats/channels, and dropping sample rates outsideCOMMON_SAMPLE_RATES. - ALSA: Fix
BufferSize::Fixedvalidation opening the PCM device a second time. - ALSA: Fix poll timeout overflow panic for stream durations exceeding ~24 days.
- ALSA: Fix
build_*_stream_rawreturningUnsupportedConfiginstead ofUnsupportedOperationfor direction-mismatched devices. - ASIO: Fix enumeration returning only the first device when using
collect(). - ASIO: Fix device enumeration and stream creation failing from spawned threads.
- ASIO: Fix buffer size not resizing on
kAsioBufferSizeChange. - ASIO: Fix latency not updating on
kAsioLatenciesChanged. - ASIO: Fix distortion when buggy drivers fire the buffer callback multiple times per cycle.
- ASIO: Fix poisoned callback and buffer-size-change mutexes silently dropping notifications.
- ASIO: Fix
driver.sample_rate()failures at stream creation silently ignored. - ASIO: Fix overrun not reported when the driver reports
kAsioOverload. - ASIO: Fix
BufferSize::Fixedwith a size not aligned to the driver's step constraint not returningErrorKind::UnsupportedConfig. - AudioWorklet: Fix
default_output_device()returning non-Nonewhen AudioWorklet is unavailable. - AudioWorklet: Fix channel count silently clamped below
destination.maxChannelCount. - AudioWorklet: Fix
supported_output_configs()reportingFrameCount::MAXas the buffer size upper bound (correct:floor(6 * sample_rate)per spec). - AudioWorklet: Fix
supported_output_configs()reporting 128 as the minimum render quantum whenrenderQuantumSizeis supported (spec minimum is 1). - CoreAudio: Fix default output streams silently stopping when the system default device is
unplugged; they now reroute or report
ErrorKind::DeviceNotAvailable. - CoreAudio: Fix undefined behavior and silent failure in loopback device creation.
- CoreAudio: Fix loopback aggregate device UID collisions between concurrent instances and after crashes.
- CoreAudio: Fix loopback capture returning silence due to disabled tap auto-start.
- CoreAudio: Fix crashes on certain drivers due to early initialization.
- CoreAudio: Fix
supported_output/input_configs()collapsing non-continuous hardware rates into a continuous range (regression since v0.17.0). - CoreAudio: Fix
BufferSize::Fixedproducing cryptic backend errors when not validated against the hardware buffer range. - CoreAudio (iOS): Fix
BufferSize::Fixednot validated against the supported range before stream creation. - JACK: Fix input capture timestamp using callback execution time instead of cycle start.
- JACK: Fix poisoned error callback mutex silently dropping subsequent error notifications.
- JACK: Fix port registration failure not propagating to stream creation.
- JACK: Fix
activate_async()failure panicking instead of returning an error. - JACK: Fix sample rate not validated against the live JACK server at stream creation.
- JACK: Fix underrun notification blocking the notification thread.
- JACK: Fix
supported_input/output_configs()reporting a hardcoded sparse channel list instead of enumerating all counts up to physical system ports. - PipeWire: Fix
channels: 0orsample_rate: 0silently using PipeWire-negotiated values instead of returningErrorKind::InvalidInput. - PulseAudio: Fix
supported_output_configs()anddefault_output_config()not accounting for PulseAudio's double-buffer. - WASAPI: Fix audio worker thread spawn failure panicking instead of returning an error.
- WASAPI: Fix Communications-class inputs returning non-silence.
- WASAPI: Fix
supported_input_configs()advertising unsupported sample rates on input devices. - WASAPI: Fix
sample_rate: 0withBufferSize::Fixedcausing a divide-by-zero panic. - WASAPI: Fix
supported_input/output_configs()anddefault_input/output_config()reporting an unconstrained buffer range on software audio stacks. - WASAPI: Fix
I24not enumerated and 24-bit devices misidentified asI32. - WebAudio: Fix overflow with pathological channel counts.
- WebAudio: Fix duplicated callbacks on repeated
play()calls. - WebAudio: Fix errors panicking instead of being reported through the callback.
- WebAudio: Fix
default_output_device()returningSomewhen WebAudio is unavailable. - WebAudio: Fix channel count silently clamped when exceeding
destination.maxChannelCount.
-
0.17.318 Feb 2026Release notes
Open source →Changed
- Reverted SemVer-breaking
DeviceBusyerror variant addition.
Fixed
- ASIO: Fix linker errors.
Release notes
Open source →Changed
- Reverted SemVer-breaking
DeviceBusyerror variant addition.
Fixed
- ASIO: Fix linker errors.
- Reverted SemVer-breaking
-
0.17.208 Feb 2026 withdrawnRelease notes
Open source →This release was yanked.
Added
DeviceBusyerror variant for retriable device access errors (EBUSY,EAGAIN).- ALSA:
Debugimplementations forHost,Device,Stream, and internal types. - ALSA: Example demonstrating ALSA error suppression during enumeration.
- WASAPI: Enable as-necessary resampling in the WASAPI server process.
Changed
- Bump overall MSRV to 1.78.
- ALSA: Update
alsadependency to 0.11. - ALSA: Bump MSRV to 1.82.
- CoreAudio: Update
core-audio-rsdependency to 0.14.
Fixed
- ALSA: Enumerating input and output devices no longer interferes with each other.
- ALSA: Device handles are no longer exclusively held between operations.
- ALSA: Reduce Valgrind memory leak reports from ALSA global configuration cache.
- ALSA: Fix possible race condition on drop.
- ALSA: Fix audio callback stalling when start threshold is not met.
Release notes
Open source →Added
DeviceBusyerror variant for retriable device access errors (EBUSY, EAGAIN).- ALSA:
Debugimplementations forHost,Device,Stream, and internal types. - ALSA: Example demonstrating ALSA error suppression during enumeration.
- ALSA: Support for native DSD playback.
- WASAPI: Enable as-necessary resampling in the WASAPI server process.
Changed
- Bump overall MSRV to 1.78.
- ALSA: Update
alsadependency to 0.11. - ALSA: Bump MSRV to 1.82.
- CoreAudio: Update
core-audio-rsdependency to 0.14.
Fixed
- ALSA: Enumerating input and output devices no longer interferes with each other.
- ALSA: Device handles are no longer exclusively held between operations.
- ALSA: Reduce Valgrind memory leak reports from ALSA global configuration cache.
- ALSA: Fix possible race condition on drop.
- ALSA: Fix audio callback stalling when start threshold is not met.
-
0.17.104 Jan 2026Release notes
Open source →Added
- ALSA:
Defaultimplementation forDevice(returns the ALSA "default" device). - CI: Checks default/no-default/all feature sets with platform-dependent MSRV for JACK.
Fixed
- ALSA: Device enumeration now includes both hints and physical cards.
- JACK: No longer builds on iOS.
- WASM: WasmBindgen no longer crashes (regression from 0.17.0).
Changed
- ALSA: Devices now report direction from hint metadata and physical hardware probing.
Release notes
Open source →Added
- ALSA:
Defaultimplementation forDevice(returns the ALSA "default" device). - CI: Checks default/no-default/all feature sets with platform-dependent MSRV for JACK.
Changed
- ALSA: Devices now report direction from hint metadata and physical hardware probing.
Fixed
- ALSA: Device enumeration now includes both hints and physical cards.
- JACK: No longer builds on iOS.
- WASM: WasmBindgen no longer crashes (regression from 0.17.0).
- ALSA:
-
0.17.020 Dec 2025Release notes
Open source →Added
DeviceTrait::idmethod that returns a stable audio device ID.HostTrait::device_by_idto select a device by its stable ID.DisplayandFromStrimplementations forHostId.- Support for custom
Hosts,Devices, andStreams. Sample::bits_per_samplemethod.Copyimplementation toInputCallbackInfoandOutputCallbackInfo.StreamError::StreamInvalidatedvariant for when stream must be rebuilt.StreamError::BufferUnderrunvariant for buffer underrun/overrun notifications.Hashimplementation toDevicefor all backends.- AAudio:
SendandSyncimplementations toStream. - AAudio: Support for 12 and 24 kHz sample rates.
- ALSA:
I24andU24sample format support (24-bit samples stored in 4 bytes). - ALSA: Support for 12, 24, 352.8, 384, 705.6, and 768 kHz sample rates.
- ALSA:
EqandPartialEqimplementations toDevice. - CI: Native ARM64 Linux support in GitHub Actions.
- CoreAudio:
i8,i32andI24sample format support (24-bit samples stored in 4 bytes). - CoreAudio: Support for loopback recording (recording system audio output) on macOS > 14.6.
- CoreAudio:
Sendimplementation toStream. - Emscripten:
BufferSize::Fixedvalidation against supported range. - iOS: Complete AVAudioSession integration for device enumeration and buffer size control.
- JACK: Support for macOS and Windows platforms.
- JACK:
BufferSize::Fixedvalidation to reject requests that don't match server buffer size. - WASAPI: Expose
IMMDevicefrom WASAPI host Device. - WASAPI:
I24andU24sample format support (24-bit samples stored in 4 bytes). - WASAPI:
SendandSyncimplementations toStream. - WebAudio:
SendandSyncimplementations toStream. - WebAudio:
BufferSize::Fixedvalidation against supported range.
Changed
- MSRV depends on the platform and at minimum 1.77.
- Set examples to Rust 2021.
SampleRatefrom struct tou32type alias.- Update
audio_thread_priorityto 0.34. - Migrate CHANGELOG to Keep a Changelog format.
- AAudio: Configure buffer to ensure consistent callback buffer sizes.
- AAudio: Buffer size range detection to query the AudioService property correctly.
- ALSA: Improve
BufferSize::Fixedprecision and audio callback performance. - ALSA:
BufferSize::Defaultto use the device defaults. - ALSA: Card enumeration to work like
aplay -Ldoes. - ALSA: Update
alsato 0.10. - ALSA: Pass
silent=truetoPCM.try_recover, so it doesn't write to stderr. - ALSA: Report buffer underruns/overruns via
StreamError::BufferUnderrun. - ASIO: Share
sys::Asioinstance across allHostinstances. - CI: Fix cargo publish to trigger on GitHub releases instead of every master commit.
- CI: Replace cargo install commands with cached tool installation for faster builds.
- CI: Update actions to latest versions (checkout@v5, rust-cache@v2).
- CI: Verify compatibility with windows crates since v0.59.
- CI: Test platforms on appropriate MSRV per backend.
- CI: Fix
cargo updatesyntax for compatibility with Cargo 1.70 (use-pflag instead of positional argument). - CoreAudio:
Device::supported_configsto return a single element containing the available sample rate range when all elements have the samemMinimumandmMaximumvalues. - CoreAudio: Default audio device detection to be lazy when building a stream, instead of during device enumeration.
- CoreAudio: Configure device buffer to ensure predictable callback buffer sizes.
- CoreAudio: Remove
Cloneimplementation fromStream. - JACK: Use
StreamError::StreamInvalidatedfor JACK server sample rate changes. - JACK: Report buffer underruns/overruns via
StreamError::BufferUnderrun. - WASAPI: Update
windowsto >= 0.59, <= 0.62.
Fixed
- ALSA: Format selection to probe hardware endianness instead of assuming native byte order.
- ALSA: Data race in stream shutdown.
- ASIO: Handling for
kAsioResetRequestmessage to prevent driver UI becoming unresponsive. - ASIO: Buffer silencing logic to work with non-conformant drivers (e.g., FL Studio ASIO).
- CoreAudio: Timestamp accuracy.
- CoreAudio: Segfaults when enumerating devices.
- CoreAudio: Undefined behavior related to null pointers and aligned reads.
- CoreAudio: Unnecessary microphone permission requests when using output devices only.
- iOS: Example by properly activating audio session.
Removed
- WebAudio: Optional
wee-allocfeature for security reasons.
-
0.16.007 Jun 2025Release notes
Open source →Added
- Optional
supports_input/outputmethods toDeviceTrait. - 384000Hz to
COMMON_SAMPLE_RATES. - Constructors for
InputCallbackInfo,OutputCallbackInfoandStreamInstant. Defaultimpl forHost.PartialOrd,OrdandHashimplementations forSampleFormat.Clone,PartialEq,EqandHashimplementations for all error enums.- ASIO: Support for int24.
Changed
- AAudio: Migrate from
oboetondk::audio. NOTE: This raises the minimum Android API version to 26 (Android 8/Oreo). - AAudio: Improve device names.
- ALSA: Set realtime priority for stream threads.
- ALSA: Improved card enumeration.
- CoreAudio: Update
coreaudio-rsdependency to 0.13. - JACK: Update
jackdependency to 0.13. - WASAPI: Set realtime priority for stream threads.
Fixed
- ALSA: Don't panic when handling invalid stream timestamps.
- ALSA: Fix infinite loop on broken pipes.
- ASIO: Fix build failure on Windows.
- CoreAudio: Fix callback being called after dropping the stream.
- CoreAudio: Fix non-default audio output.
- CoreAudio: Fix handling of integer input formats.
- WASAPI: Fixed memory leak.
- WASAPI: Remove usage of
eval.
- Optional
-
0.15.305 Mar 2024Release notes
Open source →Added
try_with_sample_rate, a non-panicking variant ofwith_sample_rate.#[must_use]attribute to structplatform::Stream.Copyimplementation to enumSupportedBufferSizeand structSupportedStreamConfigRange.Cloneimplementation toplatform::Device.
Changed
- AAudio: Update
jnidependency to 0.21. - AAudio: Update
oboedependency to 0.6. - AAudio: Update
ndkdependency to 0.8 and disabledefault-features. - ALSA: Update
alsadependency to 0.9. - CI: Update actions, use Android 30 API level in CI, remove
asmjs-unknown-emscriptentarget. - Examples: Migrate wasm example to
trunk, improve syth-thones example. - WASAPI: Update
windowsdependency to v0.54. - WebAudio: Update
wasm-bindgento 0.2.89.
Fixed
- WebAudio: Crash on web/wasm when
atomicsflag is enabled.
Removed
parking_lotdependency in favor of the std library.
-
0.15.230 Mar 2023Release notes
Open source →Added
- WebAudio: Support for multichannel output streams.
Changed
- WASAPI: Update
windowsdependency.
Fixed
- WASAPI: Fix some thread panics.
-
0.15.115 Mar 2023Release notes
Open source →Added
- AAudio: Feature
oboe-shared-stdcxxto enableshared-stdcxxonoboefor Android support.
Changed
- CoreAudio: Switch
machdependency tomach2.
Removed
thiserrordependency.
- AAudio: Feature
-
0.15.029 Jan 2023Release notes
Open source →Added
- CoreAudio: Disconnection detection on Mac OS.
Changed
- Switch to the
dasp_samplecrate for the sample trait. - Adopt edition 2021.
- AAudio: Update
oboedependency. - AAudio: Update
alsadependency. - CoreAudio: Update
coreaudio-sysdependency. - Emscripten: Switch to
web-syson the emscripten target. - JACK: Update
jackdependency. - WASAPI: Update
windows-rsdependency.
-
0.14.201 Dec 2022 -
0.14.123 Oct 2022Release notes
Open source →Added
- ALSA: Support for the 0.6.1 release of
alsa-rs. - NetBSD: Platform support.
Changed
- CI: Various improvements.
Fixed
- ASIO: Feature broken in 0.14.0.
- ALSA: Support for the 0.6.1 release of
-
0.14.022 Aug 2022Release notes
Open source →Changed
- Update
parking_lotandonce_celldependencies. - AAudio: Turn
ndk-glueinto a dev-dependency and usendk-contextinstead. - AAudio: Update
ndkandndk-gluedependencies. - JACK: Update
jackdependency. - WASAPI: Switch to
windows-rscrate.
- Update
-
0.13.528 Jan 2022Release notes
Open source →Changed
- Faster sample format conversion.
- AAudio: Update
ndk,oboe, andndk-gluedependencies. - ALSA: Update
alsaandnixdependencies. - JACK: Update
jackdependency.
-
0.13.408 Aug 2021Release notes
Open source →Changed
- AAudio: Update
jnidependency. - ALSA: Improve stream setup parameters.
- CoreAudio: Update
core-foundation-sysdependency. - JACK: Update
rust-jackdependency. - WASAPI: Allow both threading models and switch the default to STA.
- AAudio: Update
-
0.13.329 Mar 2021Release notes
Open source →Added
- Give each thread a unique name.
Fixed
- ALSA: Fix distortion regression on some configs.
-
0.13.216 Mar 2021 -
0.13.108 Nov 2020Release notes
Open source →Changed
- Update
parking_lotdependency.
Fixed
- WASAPI: Don't panic when device is plugged out on Windows.
- Update
-
0.13.003 Nov 2020Release notes
Open source →Added
- AAudio: Android support via
oboe-rs. - CI: Android APK build and CI job.
- AAudio: Android support via
-
0.12.122 Jul 2020 -
0.12.009 Jul 2020Release notes
Open source →Added
build_input/output_stream_rawmethods allowing for dynamically handling sample format type.InputCallbackInfoandOutputCallbackInfotypes and update expected user data callback function signature to provide these.- DragonFly BSD: Platform support.
Changed
- Large refactor removing the blocking EventLoop API.
- Rename many
Formattypes toStreamConfig:Formattype'sdata_typefield renamed tosample_format.Shape->StreamConfig- The configuration input required to build a stream.Format->SupportedStreamConfig- Describes a single supported stream configuration.SupportedFormat->SupportedStreamConfigRange- Describes a range of supported configurations.Device::default_input/output_format->Device::default_input/output_config.Device::supported_input/output_formats->Device::supported_input/output_configs.Device::SupportedInput/OutputFormats->Device::SupportedInput/OutputConfigs.SupportedFormatsError->SupportedStreamConfigsError.DefaultFormatError->DefaultStreamConfigError.BuildStreamError::FormatNotSupported->BuildStreamError::StreamConfigNotSupported.
- WASAPI: Address deprecated use of
mem::uninitialized.
Removed
UnknownTypeBufferin favour of specifying sample type.
-
0.11.011 Dec 2019Release notes
Open source →Added
- Name to
HostId. - WASAPI:
winbasewinapi feature to solve windows compile error issues.
Changed
- Remove many uses of
std::mem::uninitialized. - Panic on stream ID overflow rather than returning an error.
- Move errors into a separate module.
- Switch from
failuretothiserrorfor error handling. - ALSA: Use
snd_pcm_hw_params_set_buffer_time_nearrather thanset_buffer_time_max. - CI: Lots of improvements.
- Examples: Use
ringbuffercrate in feedback example.
Fixed
- ALSA: Fix some underruns that could occur.
- WASAPI: Fix capture logic.
- Name to
-
0.10.005 Jul 2019Release notes
Open source →Added
- New Host API, adding support for alternative audio APIs.
StreamEventtype to allow users to handle stream callback errors.- ASIO: ASIO host, available under Windows.
Changed
- Remove sleep loop on macOS in favour of using a
Condvar. - Overhaul error handling throughout the crate.
- Remove
panic!from OutputBuffer Deref impl as it is no longer necessary. - ALSA: Remove unnecessary Mutex in favour of channels.
- CoreAudio: Update
core-foundation-sysandcoreaudio-rsdependencies. - WASAPI: Remove unnecessary Mutex in favour of channels.
-
0.9.007 Jun 2019Release notes
Open source →Added
- ALSA: Error handling for unknown device errors.
- Emscripten:
default_output_formatimplementation.
Changed
- Better buffer handling.
Fixed
- Logic error in frame/sample size.
- WASAPI: Fix resuming a paused stream.
-
0.8.203 Jul 2018Release notes
Open source →Added
DisplayandErrorimplementations forDefaultFormatError.
Changed
- Upgrade
lazy_staticdependency.
-
0.8.101 Apr 2018Release notes
Open source →Fixed
- CoreAudio: Handling of non-default sample rates for input streams.
-
0.8.015 Feb 2018Release notes
Open source →Added
Device::supported_{input/output}_formatsmethods.Device::default_{input/output}_formatmethods.default_{input/output}_devicefunctions.StreamDatatype for handling either input or output streams inEventLoop::runcallback.- ALSA: Input stream support.
- CoreAudio: Input stream support.
- Examples:
record_wav.rsexample that records 3 seconds to$CARGO_MANIFEST_DIR/recorded.wavusing default input device. - WASAPI: Input stream support.
Changed
- Replace usage of
VoicewithStreamthroughout the crate. - Examples: Update
enumerate.rsexample to display default input/output devices and formats.
Removed
Endpointin favour ofDevicefor supporting both input and output streams.
-
0.7.004 Feb 2018Release notes
Open source →Added
- CoreAudio:
EndpointandFormatenumeration for macOS. - CoreAudio: Format handling for
build_voicemethod.
Changed
- Rename
ChannelsCounttoChannelCount. - Rename
SamplesRatetoSampleRate. - Rename the
min_samples_ratefield ofSupportedFormattomin_sample_rate. - Rename the
with_max_samples_rate()method ofSupportedFormattowith_max_sample_rate(). - Rename the
samples_ratefield ofFormattosample_rate. - Changed the type of the
channelsfield of theSupportedFormatstruct fromVec<ChannelPosition>toChannelCount(an alias tou16).
Removed
- Unused ChannelPosition API.
- CoreAudio:
-
0.6.011 Dec 2017Release notes
Open source →Added
- Improvements to the crate documentation.
- ALSA:
pauseandplaysupport.
Changed
- CoreAudio: Reduced the number of allocations.
- Emscripten: Backend to consume less CPU.
Fixed
- CoreAudio: Fixes for macOS build (#186, #189).
-
0.5.121 Oct 2017 -
0.5.021 Oct 2017Release notes
Open source →Added
EventLoop::build_voice,EventLoop::destroy_voice,EventLoop::play, andEventLoop::pausemethods.VoiceIdstruct that is now used to identify a voice owned by anEventLoop.
Changed
EventLoop::run()to take a callback that is called whenever a voice requires sound data.supported_formats()to produce a list ofSupportedFormatinstead ofFormat. ASupportedFormatmust then be turned into aFormatin order to build a voice.
Removed
- Dependency on the
futureslibrary. VoiceandSamplesStreamtypes.
-
0.4.611 Oct 2017Release notes
Open source →Added
- iOS: Minimal support.
Changed
- Run rustfmt on the code.
Fixed
- BSD: Fixes for *BSDs.
Removed
get_prefix of methods.
-
0.4.528 Apr 2017Release notes
Open source →Changed
- Simplify the Cargo.toml.
- ALSA: Bump alsa-sys version number.
- ALSA: Mark alsa-sys as linking to alsa.
Fixed
- CoreAudio: SampleStream also holds on to the AudioUnit so it is not dropped.
- CoreAudio: Fix for loop in EventLoop::run being optimised out in a release build on macOS.
Removed
- Stop publishing on gh-pages.
-
0.4.404 Feb 2017Release notes
Open source →Fixed
- ALSA: Pass period instead of buffer to snd_pcm_sw_params_set_avail_min.
-
0.4.302 Feb 2017Release notes
Open source →Fixed
- ALSA: Set sw_params_set_avail_min based on get_params buffer size.
-
0.4.219 Jan 2017Release notes
Open source →Added
- CoreAudio: coreaudio-rs dependency for i686-apple-darwin.
Deprecated
- Mark deprecated functions as deprecated.
-
0.4.116 Nov 2016Release notes
Open source →Added
- ALSA: Implement play and pause.
- CoreAudio: Implement play/pause.
Fixed
- WASAPI: Fix compilation on windows.
-
0.4.001 Oct 2016Release notes
Open source →Added
- Added
Driver::streams()to access a driver's shared input/output buffer state - Derived
DebugonAsioStreamsandAsioStream
Thanks to Our Contributors
Thanks to MordechaiHadad (@MordechaiHadad), who reported the duplex-stream bug (#1287) that
Driver::streams()fixes in this release.Release notes
Open source →Changed
- ALSA: Update to futures 0.1.1.
- WASAPI: Update to futures 0.1.1.
Fixed
- CoreAudio: Do not lock inner twice. Fixes bug in osx futures 0.1.1 update.
- CoreAudio: Try fix the OSX code with futures.
- Added
-
0.3.120 Aug 2016Release notes
Open source →Added
- WASAPI: Some documentation to the winapi implementation.
Changed
- ALSA: Bump alsa-sys to 0.1.
Fixed
- Fix #126.
- Fix most warnings.
-
0.3.014 Aug 2016Release notes
Open source →Added
- Added
Driver::latencies()to query input and output stream latencies - Added
BufferPreferenceenum with the driver's preferred buffer size and valid-size constraints
Changed
Driver::add_message_callbackandDriver::remove_message_callbackreplaced byDriver::add_event_callbackandDriver::remove_event_callbackMessageCallbackrenamed toDriverEventCallback, andMessageCallbackIdrenamed toDriverEventCallbackId.DriverEventCallbackwrapsFn(AsioDriverEvent) -> boolwhereAsioDriverEventis a new enum covering bothasioMessageselector events andsampleRateDidChangenotificationsCallbackIdrenamed toBufferCallbackId- Public-facing
c_longfields and return types replaced withi32 - Public-facing
c_doubleparameters and return types replaced withf64 CallbackInfo::system_timeis nowu64nanosecondsAsioError::ASE_NoMemoryrenamed toAsioError::NoMemory- Extended
BufferSizeRangewith apreferred: BufferPreferencefield AsioTime::reserved,AsioTimeInfo::reserved,AsioTimeCode::futurefields made private.asio_importmodule is nowpub(crate); raw bindgen types are no longer public APIasio_messagenow dispatcheskAsioResyncRequestandkAsioLatenciesChangedto callbacksasio_messagedelegateskAsioSelectorSupportedfor unknown selectors to registered callbacks, so each host decides which capabilities it opts intosample_rate_did_changenow dispatchesAsioDriverEvent::SampleRateChangedto registered callbacks when the reported rate differs from the last known rate
Fixed
- Fixed TOCTOU race condition when creating streams concurrently
- Fixed data race where
channels,latencies,sample_rate, and related query methods could call ASIO concurrently duringset_sample_rate's teardown/reload - Fixed
Asio::load_driverto returnLoadDriverError::LoadDriverFailedinstead of panicking when the driver name contains a null byte - Fixed
Driver::set_sample_rateto perform a dummy buffer cycle and driver reload when the driver does not apply the rate change immediately, as required by some drivers (e.g. Steinberg) - Fixed
asio_messagenot advertisingkAsioSelectorSupporteditself as a supported selector - Fixed rust-analyzer errors on non-Windows targets by using stub instead of ASIO bindings
Removed
- Removed unused
SampleRatestruct - Removed
DriverStatefrom the public API
Thanks to Our Contributors
Thanks to Jerry.Wang (@wangjia184), who fixed the rust-analyzer build on non-Windows targets (#1140).
Release notes
Open source →Added
- CoreAudio: Update backend to new futures-rs oriented design.
Changed
- Update documentation.
- Use a max buffer size in order to avoid problems.
- Update deps.
- ALSA: Make it work on Linux.
- Null: Update the null implementation.
- Added
-
0.2.1202 Aug 2016Release notes
Open source →Added
- CoreAudio: Add get_period to Voice.
Changed
- CoreAudio: Update to coreaudio-rs 0.5.0.
Fixed
- CoreAudio: Correct implementation of get_pending_samples.
- CoreAudio: Return correct Voice period.
-
0.2.1125 Apr 2016 -
0.2.1022 Apr 2016Release notes
Open source →Added
- ALSA: Add pollfd.
Fixed
- ALSA: Fix underflow detection.
- Android: Fix the android build.
- Android: Add ARM target.
-
0.2.928 Jan 2016Release notes
Open source →Added
- CoreAudio: Add support for U16/I16 PCM formats.
- CoreAudio: Implement some missing functions.
Changed
- Handle channels positionning.
- Update Cargo.toml after the previous changes.
- Allow for building for mipsel targets.
- ALSA: Use correct ALSA channels.
- CoreAudio: Implementation cleanup.
- CoreAudio: Make Voice Send/Sync.
- CoreAudio: Set sample rate to 44100.
- Examples: Update the beep example.
Fixed
- ALSA: Fix underflow bug on linux.
- CI: Fix for travis build.
- CoreAudio: Fix compilation on OSX with the new API for coreaudio-rs.
- CoreAudio: Return correct length of buffer, stub unimpl funcs.
- CoreAudio: Restore CoreAudio support after API overhaul.
- Examples: Add some sane error messages.
- Examples: Improve error reporting in beep example.
Removed
- Do not use a wildcard version number.
- CoreAudio: Revert "Add support for U16/I16 PCM formats" (was causing issues).
-
0.2.810 Nov 2015Release notes
Open source →Changed
- Libc 0.2.
- WASAPI: Update winapi.
Fixed
- WASAPI: Catch another 'device not found' error code.
-
0.2.727 Sep 2015 -
0.2.622 Sep 2015Release notes
Open source →Fixed
- ALSA: Make sure that all writes succeed.
- ALSA: Make the implementation more robust by recovering from underruns.
-
0.2.522 Sep 2015 -
0.2.422 Sep 2015Release notes
Open source →Added
endpoint::get_name()method.- Examples: An enumerate example.
- WASAPI: Device name support.
Changed
- ALSA: Correctly enumerate supported formats.
Fixed
- ALSA: Various fixes.
- ALSA: Use the correct format.
- ALSA: Use the correct device name when enumerating formats.
- WASAPI: Fix bug and filter out devices that are not "Output".
-
0.2.322 Sep 2015Release notes
Open source →Added
#[inline]attributes.underflow()method to Voice.
Changed
- Store the format in the public
Voicestruct. - WASAPI: General cleanup.
- WASAPI: Update winapi dependency.
Fixed
- WASAPI: Fix the hack in the implementation.
Removed
- Unused extern crate libc.
-
0.2.211 Sep 2015Release notes
Open source →Added
UnknownBufferType::len()method.
Fixed
- Null: Restore the null implementation and compile it every time.
-
0.2.110 Sep 2015Release notes
Open source →Changed
- Handle channels positionning.
- Update Cargo.toml after the previous changes.
- Examples: Update the beep example.
Fixed
- ALSA: Fix compilation.
-
0.2.010 Sep 2015Release notes
Open source →Added
- Proper error handling.
- Supported formats enumeration.
endpoint::get_name()method.
Changed
- ALSA: Make it compile again.
- WASAPI: Enable 32bits samples.
- WASAPI: Better error handling in format detection.
- WASAPI: Now decoding the format from the WAVEFORMAT returned by the winapi.
- WASAPI: Handle F32 formats in Voice::new.
- WASAPI: Use the format passed as parameter in Voice::new.
- WASAPI: Correctly enumerate audio devices (core + wasapi).
Fixed
- Fix doctests.
- Add more detailed message to panic.
Removed
- Conversion system.
- Use of box syntax.
-
0.1.222 Jul 2015Release notes
Open source →Fixed
- ALSA: Correct reported sample format.
- WASAPI: Fix samples signs on win32.
-
0.1.120 Jul 2015 -
0.1.011 Jul 2015 -
0.0.2304 Jul 2015 -
0.0.2224 Jun 2015