PackageTrack
Sign in Get early access

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 2026
2015 2017 2019 2021 2023 2025
Release Pre-release Withdrawn

Releases

latest 60 of 80
  1. 0.18.2 16 Aug 2026
    Release notes

    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-dbus has no effect there.
    • CoreAudio: Bump objc2-core-foundation dependency 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 realtime alone is a no-op without realtime-dbus.
    • PipeWire: Devices with multiple ports now get distinct, localized, per-port names.
    • WASAPI: The windows and windows-core dependencies 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 Device handles.
    • AudioWorklet: Fix Stream operations 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::id no longer embeds the process ID, so DeviceId is 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 /Internal media 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: NoData errors 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, and pause no 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 + Sync on Stream when compiled with +atomics.
    • WebAudio: Fix Host::is_available() always returning true, 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!

    Open source →
    Release notes

    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-dbus has no effect there.
    • CoreAudio: Bump objc2-core-foundation dependency 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 realtime alone is a no-op without realtime-dbus.
    • PipeWire: Devices with multiple ports now get distinct, localized, per-port names.
    • WASAPI: The windows and windows-core dependencies 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 Device handles.
    • AudioWorklet: Fix Stream operations 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::id no longer embeds the process ID, so DeviceId is 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 /Internal media 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: NoData errors 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, and pause no 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 + Sync on Stream when compiled with +atomics.
    • WebAudio: Fix Host::is_available() always returning true, even in non-window contexts.
    Open source →
  2. 0.18.1 07 Jun 2026
    Release notes

    A quick follow-up to 0.18.0 primarily to fix the docs.rs build failure.

    • docs.rs: Excluded pipewire, whose system dependency isn't available in that sandboxed build environment.
    • WASM: Fixed the audioworklet feature failing to compile on wasm32-wasip1 and other non-browser wasm32 targets.

    No API or behavioral changes.

    Links

    Open source →
    Release notes

    Fixed

    • Exclude pipewire from the docs.rs build; system dependency not available in its environment.
    • Fix wasm-bindgen causing compile errors on non-browser wasm32 targets such as wasm32-wasip1.
    Open source →
  3. 0.18.0 06 Jun 2026
    Release notes

    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 pipewire and pulseaudio Cargo 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 single cpal::Error with a kind() 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/EAGAIN is retryable) and PermissionDenied for 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: LinkSynchronized hardware 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() and default_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 size
    • SupportedStreamConfigRange::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 like hw:0,0 and plughw: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 FriendlyName over DeviceDesc, 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 called play(), your callback will never fire after upgrading.
    • Error types unified: match on e.kind() instead of per-operation error enums.
    • StreamConfig passed by value: StreamConfig now implements Copy; drop the & at build_*_stream call sites.
    • StreamInstant API overhauled: aligns with std::time::Instant. Change add/sub to checked_add/checked_sub (or +/-); duration_since returns Duration (saturating), secs/nanos are now u64.
    • 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 F32 explicitly if you were relying on it as the default.
    • Emscripten host removed: migrate to wasm32-unknown-unknown with the wasm-bindgen feature.

    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/pause to start/pause/stop with a draining stop
    • Native DSD on WASAPI
    • BufferSize refactor 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

    Huge thanks to everyone who contributed to this release!

    Open source →
    Release notes

    Added

    • New ErrorKind variants 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).
    • Device now implements PartialEq, Eq, Hash, Display, and Debug on all backends.
    • realtime feature 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) and SAMPLE_RATE_48K (48000 Hz) constants.
    • SupportedStreamConfigRange::try_with_standard_sample_rate() and with_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.
    • StreamConfig and SupportedStreamConfig now implement Copy.
    • BufferSize now implements Default (returns BufferSize::Default).
    • SupportedBufferSize now implements Default (returns SupportedBufferSize::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_LATENCY with the realtime feature; reports ErrorKind::RealtimeDenied if not granted.
    • ALSA: device_by_id() now accepts PCM shorthand names such as hw:0,0 and plughw: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: F64 sample format support.

    Changed

    • Changed per-operation error types (DevicesError, SupportedStreamConfigsError, etc.) and HostUnavailable into a unified Error/ErrorKind. See UPGRADING.md.
    • DeviceTrait now requires PartialEq + Eq + Hash + Debug + Display with a stable device ID.
    • DeviceTrait::build_*_stream() now takes StreamConfig by value instead of &StreamConfig.
    • StreamInstant API changed and extended to mirror std::time::Instant/Duration. See UPGRADING.md for migration details.
    • Streams no longer start automatically on build_*_stream(); call play() 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_heuristics now ranks all SampleFormat variants; F32 > F64 > descending integer widths. Default configs may now return I32 or I24 on high-precision hardware. See UPGRADING.md.
    • Bump MSRV to 1.85.
    • DeviceId fields are now private; construct with DeviceId::new(host, id) and access with .host() / .id(). See UPGRADING.md.
    • audio_thread_priority feature renamed to realtime-dbus.
    • DeviceDescription::extended() now returns impl Iterator<Item = &str> instead of &[String]. See UPGRADING.md.
    • HostId::name() now returns a more human-friendly name.
    • DeviceDescriptionBuilder setters now accept impl AsRef<str> instead of impl Into<String>.
    • AAudio: Channel enumeration extended to 8 channels.
    • AAudio: Buffers with default sizes are now dynamically tuned.
    • AAudio: SupportedBufferSize in enumeration is now Unknown.
    • AAudio: Device names now include the device type suffix (e.g. Speaker (Builtin Speaker)).
    • AAudio: supported_input_configs() and supported_output_configs() now return an error for direction-mismatched devices instead of silently returning an empty list.
    • ALSA: Stream error callback now receives ErrorKind::DeviceNotAvailable on device disconnection.
    • ALSA: Callback timestamps use LinkSynchronized hardware 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 realtime feature 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::StreamInvalidated on kAsioResyncRequest or 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, and current_callback_flag are no longer pub.
    • AudioWorklet: BufferSize::Fixed now sets renderSizeHint on the AudioContext.
    • 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::StreamInvalidated on any sample rate change on macOS, and on iOS on route changes that require a stream rebuild.
    • CoreAudio: Stream error callback now receives ErrorKind::DeviceNotAvailable on iOS when media services are lost.
    • CoreAudio: Stream error callback now receives ErrorKind::DeviceChanged when 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::DeviceNotAvailable on server shutdown.
    • JACK: Stream error callback now receives ErrorKind::RealtimeDenied once if the process callback is not running at real-time scheduling priority.
    • JACK: Stream::connect_to_system_outputs() and connect_to_system_inputs() now return Result<(), 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: FriendlyName is now preferred as device name over DeviceDesc.
    • WASAPI: Device::immdevice() now returns Option<Audio::IMMDevice>.
    • WASAPI: Raise windows dependency 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() and sub() replaced by checked_add()/+ and checked_sub()/-.
    • Removed deprecated DeviceTrait::name().
    • ALSA: Default implementation for Device.
    • ALSA: AlsaHost is no longer re-exported from cpal::platform.
    • Emscripten: Removed broken host; use the WebAudio host instead.
    • WASAPI: Removed U24 incorrectly listed as a supported sample format.

    Fixed

    • channels: 0, sample_rate: 0, or BufferSize::Fixed(0) now return ErrorKind::InvalidInput consistently across all backends (previously UnsupportedConfig or a panic).
    • Output buffers are now zero-filled before the callback runs across all backends.
    • Poisoned mutex guards now return ErrorKind::StreamInvalidated instead of panicking (AAudio, ASIO, CoreAudio, JACK, WASAPI).
    • Fix callbacks firing before build_*_stream returns the Stream handle (ALSA, ASIO, WASAPI).
    • Fix buffer_capacity_in_frames integer 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_rate values above i32::MAX panicking.
    • AAudio: Fix stream errors not forwarded to error_callback.
    • AAudio: Return ErrorKind::BackendError instead 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 outside COMMON_SAMPLE_RATES.
    • ALSA: Fix BufferSize::Fixed validation opening the PCM device a second time.
    • ALSA: Fix poll timeout overflow panic for stream durations exceeding ~24 days.
    • ALSA: Fix build_*_stream_raw returning UnsupportedConfig instead of UnsupportedOperation for 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::Fixed with a size not aligned to the driver's step constraint not returning ErrorKind::UnsupportedConfig.
    • AudioWorklet: Fix default_output_device() returning non-None when AudioWorklet is unavailable.
    • AudioWorklet: Fix channel count silently clamped below destination.maxChannelCount.
    • AudioWorklet: Fix supported_output_configs() reporting FrameCount::MAX as the buffer size upper bound (correct: floor(6 * sample_rate) per spec).
    • AudioWorklet: Fix supported_output_configs() reporting 128 as the minimum render quantum when renderQuantumSize is 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::Fixed producing cryptic backend errors when not validated against the hardware buffer range.
    • CoreAudio (iOS): Fix BufferSize::Fixed not 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: 0 or sample_rate: 0 silently using PipeWire-negotiated values instead of returning ErrorKind::InvalidInput.
    • PulseAudio: Fix supported_output_configs() and default_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: 0 with BufferSize::Fixed causing a divide-by-zero panic.
    • WASAPI: Fix supported_input/output_configs() and default_input/output_config() reporting an unconstrained buffer range on software audio stacks.
    • WASAPI: Fix I24 not enumerated and 24-bit devices misidentified as I32.
    • 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() returning Some when WebAudio is unavailable.
    • WebAudio: Fix channel count silently clamped when exceeding destination.maxChannelCount.
    Open source →
  4. 0.17.3 18 Feb 2026
    Release notes

    Changed

    • Reverted SemVer-breaking DeviceBusy error variant addition.

    Fixed

    • ASIO: Fix linker errors.
    Open source →
    Release notes

    Changed

    • Reverted SemVer-breaking DeviceBusy error variant addition.

    Fixed

    • ASIO: Fix linker errors.
    Open source →
  5. 0.17.2 08 Feb 2026 withdrawn
    Release notes

    This release was yanked.

    Added

    • DeviceBusy error variant for retriable device access errors (EBUSY, EAGAIN).
    • ALSA: Debug implementations for Host, 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 alsa dependency to 0.11.
    • ALSA: Bump MSRV to 1.82.
    • CoreAudio: Update core-audio-rs dependency 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.
    Open source →
    Release notes

    Added

    • DeviceBusy error variant for retriable device access errors (EBUSY, EAGAIN).
    • ALSA: Debug implementations for Host, 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 alsa dependency to 0.11.
    • ALSA: Bump MSRV to 1.82.
    • CoreAudio: Update core-audio-rs dependency 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.
    Open source →
  6. 0.17.1 04 Jan 2026
    Release notes

    Added

    • ALSA: Default implementation for Device (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.
    Open source →
    Release notes

    Added

    • ALSA: Default implementation for Device (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).
    Open source →
  7. 0.17.0 20 Dec 2025
    Release notes

    Added

    • DeviceTrait::id method that returns a stable audio device ID.
    • HostTrait::device_by_id to select a device by its stable ID.
    • Display and FromStr implementations for HostId.
    • Support for custom Hosts, Devices, and Streams.
    • Sample::bits_per_sample method.
    • Copy implementation to InputCallbackInfo and OutputCallbackInfo.
    • StreamError::StreamInvalidated variant for when stream must be rebuilt.
    • StreamError::BufferUnderrun variant for buffer underrun/overrun notifications.
    • Hash implementation to Device for all backends.
    • AAudio: Send and Sync implementations to Stream.
    • AAudio: Support for 12 and 24 kHz sample rates.
    • ALSA: I24 and U24 sample 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: Eq and PartialEq implementations to Device.
    • CI: Native ARM64 Linux support in GitHub Actions.
    • CoreAudio: i8, i32 and I24 sample format support (24-bit samples stored in 4 bytes).
    • CoreAudio: Support for loopback recording (recording system audio output) on macOS > 14.6.
    • CoreAudio: Send implementation to Stream.
    • Emscripten: BufferSize::Fixed validation against supported range.
    • iOS: Complete AVAudioSession integration for device enumeration and buffer size control.
    • JACK: Support for macOS and Windows platforms.
    • JACK: BufferSize::Fixed validation to reject requests that don't match server buffer size.
    • WASAPI: Expose IMMDevice from WASAPI host Device.
    • WASAPI: I24 and U24 sample format support (24-bit samples stored in 4 bytes).
    • WASAPI: Send and Sync implementations to Stream.
    • WebAudio: Send and Sync implementations to Stream.
    • WebAudio: BufferSize::Fixed validation against supported range.

    Changed

    • MSRV depends on the platform and at minimum 1.77.
    • Set examples to Rust 2021.
    • SampleRate from struct to u32 type alias.
    • Update audio_thread_priority to 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::Fixed precision and audio callback performance.
    • ALSA: BufferSize::Default to use the device defaults.
    • ALSA: Card enumeration to work like aplay -L does.
    • ALSA: Update alsa to 0.10.
    • ALSA: Pass silent=true to PCM.try_recover, so it doesn't write to stderr.
    • ALSA: Report buffer underruns/overruns via StreamError::BufferUnderrun.
    • ASIO: Share sys::Asio instance across all Host instances.
    • 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 update syntax for compatibility with Cargo 1.70 (use -p flag instead of positional argument).
    • CoreAudio: Device::supported_configs to return a single element containing the available sample rate range when all elements have the same mMinimum and mMaximum values.
    • 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 Clone implementation from Stream.
    • JACK: Use StreamError::StreamInvalidated for JACK server sample rate changes.
    • JACK: Report buffer underruns/overruns via StreamError::BufferUnderrun.
    • WASAPI: Update windows to >= 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 kAsioResetRequest message 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-alloc feature for security reasons.
    Open source →
  8. 0.16.0 07 Jun 2025
    Release notes

    Added

    • Optional supports_input/output methods to DeviceTrait.
    • 384000Hz to COMMON_SAMPLE_RATES.
    • Constructors for InputCallbackInfo, OutputCallbackInfo and StreamInstant.
    • Default impl for Host.
    • PartialOrd, Ord and Hash implementations for SampleFormat.
    • Clone, PartialEq, Eq and Hash implementations for all error enums.
    • ASIO: Support for int24.

    Changed

    • AAudio: Migrate from oboe to ndk::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-rs dependency to 0.13.
    • JACK: Update jack dependency 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.
    Open source →
  9. 0.15.3 05 Mar 2024
    Release notes

    Added

    • try_with_sample_rate, a non-panicking variant of with_sample_rate.
    • #[must_use] attribute to struct platform::Stream.
    • Copy implementation to enum SupportedBufferSize and struct SupportedStreamConfigRange.
    • Clone implementation to platform::Device.

    Changed

    • AAudio: Update jni dependency to 0.21.
    • AAudio: Update oboe dependency to 0.6.
    • AAudio: Update ndk dependency to 0.8 and disable default-features.
    • ALSA: Update alsa dependency to 0.9.
    • CI: Update actions, use Android 30 API level in CI, remove asmjs-unknown-emscripten target.
    • Examples: Migrate wasm example to trunk, improve syth-thones example.
    • WASAPI: Update windows dependency to v0.54.
    • WebAudio: Update wasm-bindgen to 0.2.89.

    Fixed

    • WebAudio: Crash on web/wasm when atomics flag is enabled.

    Removed

    • parking_lot dependency in favor of the std library.
    Open source →
  10. 0.15.2 30 Mar 2023
    Release notes

    Added

    • WebAudio: Support for multichannel output streams.

    Changed

    • WASAPI: Update windows dependency.

    Fixed

    • WASAPI: Fix some thread panics.
    Open source →
  11. 0.15.1 15 Mar 2023
    Release notes

    Added

    • AAudio: Feature oboe-shared-stdcxx to enable shared-stdcxx on oboe for Android support.

    Changed

    • CoreAudio: Switch mach dependency to mach2.

    Removed

    • thiserror dependency.
    Open source →
  12. 0.15.0 29 Jan 2023
    Release notes

    Added

    • CoreAudio: Disconnection detection on Mac OS.

    Changed

    • Switch to the dasp_sample crate for the sample trait.
    • Adopt edition 2021.
    • AAudio: Update oboe dependency.
    • AAudio: Update alsa dependency.
    • CoreAudio: Update coreaudio-sys dependency.
    • Emscripten: Switch to web-sys on the emscripten target.
    • JACK: Update jack dependency.
    • WASAPI: Update windows-rs dependency.
    Open source →
  13. 0.14.2 01 Dec 2022
    Release notes

    Removed

    • nix dependency.
    Open source →
  14. 0.14.1 23 Oct 2022
    Release notes

    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.
    Open source →
  15. 0.14.0 22 Aug 2022
    Release notes

    Changed

    • Update parking_lot and once_cell dependencies.
    • AAudio: Turn ndk-glue into a dev-dependency and use ndk-context instead.
    • AAudio: Update ndk and ndk-glue dependencies.
    • JACK: Update jack dependency.
    • WASAPI: Switch to windows-rs crate.
    Open source →
  16. 0.13.5 28 Jan 2022
    Release notes

    Changed

    • Faster sample format conversion.
    • AAudio: Update ndk, oboe, and ndk-glue dependencies.
    • ALSA: Update alsa and nix dependencies.
    • JACK: Update jack dependency.
    Open source →
  17. 0.13.4 08 Aug 2021
    Release notes

    Changed

    • AAudio: Update jni dependency.
    • ALSA: Improve stream setup parameters.
    • CoreAudio: Update core-foundation-sys dependency.
    • JACK: Update rust-jack dependency.
    • WASAPI: Allow both threading models and switch the default to STA.
    Open source →
  18. 0.13.3 29 Mar 2021
    Release notes

    Added

    • Give each thread a unique name.

    Fixed

    • ALSA: Fix distortion regression on some configs.
    Open source →
  19. 0.13.2 16 Mar 2021
    Release notes

    Changed

    • AAudio: Update ndk, nix, oboe, and jni dependencies.
    Open source →
  20. 0.13.1 08 Nov 2020
    Release notes

    Changed

    • Update parking_lot dependency.

    Fixed

    • WASAPI: Don't panic when device is plugged out on Windows.
    Open source →
  21. 0.13.0 03 Nov 2020
    Release notes

    Added

    • AAudio: Android support via oboe-rs.
    • CI: Android APK build and CI job.
    Open source →
  22. 0.12.1 22 Jul 2020
    Release notes

    Fixed

    • ASIO: Bugfix release to get the asio feature working again.
    Open source →
  23. 0.12.0 09 Jul 2020
    Release notes

    Added

    • build_input/output_stream_raw methods allowing for dynamically handling sample format type.
    • InputCallbackInfo and OutputCallbackInfo types 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 Format types to StreamConfig:
      • Format type's data_type field renamed to sample_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

    • UnknownTypeBuffer in favour of specifying sample type.
    Open source →
  24. 0.11.0 11 Dec 2019
    Release notes

    Added

    • Name to HostId.
    • WASAPI: winbase winapi 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 failure to thiserror for error handling.
    • ALSA: Use snd_pcm_hw_params_set_buffer_time_near rather than set_buffer_time_max.
    • CI: Lots of improvements.
    • Examples: Use ringbuffer crate in feedback example.

    Fixed

    • ALSA: Fix some underruns that could occur.
    • WASAPI: Fix capture logic.
    Open source →
  25. 0.10.0 05 Jul 2019
    Release notes

    Added

    • New Host API, adding support for alternative audio APIs.
    • StreamEvent type 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-sys and coreaudio-rs dependencies.
    • WASAPI: Remove unnecessary Mutex in favour of channels.
    Open source →
  26. 0.9.0 07 Jun 2019
    Release notes

    Added

    • ALSA: Error handling for unknown device errors.
    • Emscripten: default_output_format implementation.

    Changed

    • Better buffer handling.

    Fixed

    • Logic error in frame/sample size.
    • WASAPI: Fix resuming a paused stream.
    Open source →
  27. 0.8.2 03 Jul 2018
    Release notes

    Added

    • Display and Error implementations for DefaultFormatError.

    Changed

    • Upgrade lazy_static dependency.
    Open source →
  28. 0.8.1 01 Apr 2018
    Release notes

    Fixed

    • CoreAudio: Handling of non-default sample rates for input streams.
    Open source →
  29. 0.8.0 15 Feb 2018
    Release notes

    Added

    • Device::supported_{input/output}_formats methods.
    • Device::default_{input/output}_format methods.
    • default_{input/output}_device functions.
    • StreamData type for handling either input or output streams in EventLoop::run callback.
    • ALSA: Input stream support.
    • CoreAudio: Input stream support.
    • Examples: record_wav.rs example that records 3 seconds to $CARGO_MANIFEST_DIR/recorded.wav using default input device.
    • WASAPI: Input stream support.

    Changed

    • Replace usage of Voice with Stream throughout the crate.
    • Examples: Update enumerate.rs example to display default input/output devices and formats.

    Removed

    • Endpoint in favour of Device for supporting both input and output streams.
    Open source →
  30. 0.7.0 04 Feb 2018
    Release notes

    Added

    • CoreAudio: Endpoint and Format enumeration for macOS.
    • CoreAudio: Format handling for build_voice method.

    Changed

    • Rename ChannelsCount to ChannelCount.
    • Rename SamplesRate to SampleRate.
    • Rename the min_samples_rate field of SupportedFormat to min_sample_rate.
    • Rename the with_max_samples_rate() method of SupportedFormat to with_max_sample_rate().
    • Rename the samples_rate field of Format to sample_rate.
    • Changed the type of the channels field of the SupportedFormat struct from Vec<ChannelPosition> to ChannelCount (an alias to u16).

    Removed

    • Unused ChannelPosition API.
    Open source →
  31. 0.6.0 11 Dec 2017
    Release notes

    Added

    • Improvements to the crate documentation.
    • ALSA: pause and play support.

    Changed

    • CoreAudio: Reduced the number of allocations.
    • Emscripten: Backend to consume less CPU.

    Fixed

    • CoreAudio: Fixes for macOS build (#186, #189).
    Open source →
  32. 0.5.1 21 Oct 2017
    Release notes

    Added

    • Sample::to_i16(), Sample::to_u16() and Sample::from methods.
    Open source →
  33. 0.5.0 21 Oct 2017
    Release notes

    Added

    • EventLoop::build_voice, EventLoop::destroy_voice, EventLoop::play, and EventLoop::pause methods.
    • VoiceId struct that is now used to identify a voice owned by an EventLoop.

    Changed

    • EventLoop::run() to take a callback that is called whenever a voice requires sound data.
    • supported_formats() to produce a list of SupportedFormat instead of Format. A SupportedFormat must then be turned into a Format in order to build a voice.

    Removed

    • Dependency on the futures library.
    • Voice and SamplesStream types.
    Open source →
  34. 0.4.6 11 Oct 2017
    Release notes

    Added

    • iOS: Minimal support.

    Changed

    • Run rustfmt on the code.

    Fixed

    • BSD: Fixes for *BSDs.

    Removed

    • get_ prefix of methods.
    Open source →
  35. 0.4.5 28 Apr 2017
    Release notes

    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.
    Open source →
  36. 0.4.4 04 Feb 2017
    Release notes

    Fixed

    • ALSA: Pass period instead of buffer to snd_pcm_sw_params_set_avail_min.
    Open source →
  37. 0.4.3 02 Feb 2017
    Release notes

    Fixed

    • ALSA: Set sw_params_set_avail_min based on get_params buffer size.
    Open source →
  38. 0.4.2 19 Jan 2017
    Release notes

    Added

    • CoreAudio: coreaudio-rs dependency for i686-apple-darwin.

    Deprecated

    • Mark deprecated functions as deprecated.
    Open source →
  39. 0.4.1 16 Nov 2016
    Release notes

    Added

    • ALSA: Implement play and pause.
    • CoreAudio: Implement play/pause.

    Fixed

    • WASAPI: Fix compilation on windows.
    Open source →
  40. 0.4.0 01 Oct 2016
    Release notes

    Added

    • Added Driver::streams() to access a driver's shared input/output buffer state
    • Derived Debug on AsioStreams and AsioStream

    Thanks to Our Contributors

    Thanks to MordechaiHadad (@MordechaiHadad), who reported the duplex-stream bug (#1287) that Driver::streams() fixes in this release.

    Open source →
    Release notes

    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.
    Open source →
  41. 0.3.1 20 Aug 2016
    Release notes

    Added

    • WASAPI: Some documentation to the winapi implementation.

    Changed

    • ALSA: Bump alsa-sys to 0.1.

    Fixed

    • Fix #126.
    • Fix most warnings.
    Open source →
  42. 0.3.0 14 Aug 2016
    Release notes

    Added

    • Added Driver::latencies() to query input and output stream latencies
    • Added BufferPreference enum with the driver's preferred buffer size and valid-size constraints

    Changed

    • Driver::add_message_callback and Driver::remove_message_callback replaced by Driver::add_event_callback and Driver::remove_event_callback
    • MessageCallback renamed to DriverEventCallback, and MessageCallbackId renamed to DriverEventCallbackId. DriverEventCallback wraps Fn(AsioDriverEvent) -> bool whereAsioDriverEvent is a new enum covering both asioMessage selector events and sampleRateDidChange notifications
    • CallbackId renamed to BufferCallbackId
    • Public-facing c_long fields and return types replaced with i32
    • Public-facing c_double parameters and return types replaced with f64
    • CallbackInfo::system_time is now u64 nanoseconds
    • AsioError::ASE_NoMemory renamed to AsioError::NoMemory
    • Extended BufferSizeRange with a preferred: BufferPreference field
    • AsioTime::reserved, AsioTimeInfo::reserved, AsioTimeCode::future fields made private.
    • asio_import module is now pub(crate); raw bindgen types are no longer public API
    • asio_message now dispatches kAsioResyncRequest and kAsioLatenciesChanged to callbacks
    • asio_message delegates kAsioSelectorSupported for unknown selectors to registered callbacks, so each host decides which capabilities it opts into
    • sample_rate_did_change now dispatches AsioDriverEvent::SampleRateChanged to 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 during set_sample_rate's teardown/reload
    • Fixed Asio::load_driver to return LoadDriverError::LoadDriverFailed instead of panicking when the driver name contains a null byte
    • Fixed Driver::set_sample_rate to 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_message not advertising kAsioSelectorSupported itself as a supported selector
    • Fixed rust-analyzer errors on non-Windows targets by using stub instead of ASIO bindings

    Removed

    • Removed unused SampleRate struct
    • Removed DriverState from the public API

    Thanks to Our Contributors

    Thanks to Jerry.Wang (@wangjia184), who fixed the rust-analyzer build on non-Windows targets (#1140).

    Open source →
    Release notes

    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.
    Open source →
  43. 0.2.12 02 Aug 2016
    Release notes

    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.
    Open source →
  44. 0.2.11 25 Apr 2016
    Release notes

    Fixed

    • Be more relaxed with c_void.
    Open source →
  45. 0.2.10 22 Apr 2016
    Release notes

    Added

    • ALSA: Add pollfd.

    Fixed

    • ALSA: Fix underflow detection.
    • Android: Fix the android build.
    • Android: Add ARM target.
    Open source →
  46. 0.2.9 28 Jan 2016
    Release notes

    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).
    Open source →
  47. 0.2.8 10 Nov 2015
    Release notes

    Changed

    • Libc 0.2.
    • WASAPI: Update winapi.

    Fixed

    • WASAPI: Catch another 'device not found' error code.
    Open source →
  48. 0.2.7 27 Sep 2015
    Release notes

    Added

    • Voice::get_period() method.
    Open source →
  49. 0.2.6 22 Sep 2015
    Release notes

    Fixed

    • Link advapi32 to resolve Windows Registry API symbols.
    Open source →
    Release notes

    Fixed

    • ALSA: Make sure that all writes succeed.
    • ALSA: Make the implementation more robust by recovering from underruns.
    Open source →
  50. 0.2.5 22 Sep 2015
    Release notes

    Fixed

    • Fixed ASIO SDK discovery on case sensitive filesystems.
    Open source →
    Release notes

    Added

    • Voice::get_pending_samples method.
    Open source →
  51. 0.2.4 22 Sep 2015
    Release notes

    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".
    Open source →
  52. 0.2.3 22 Sep 2015
    Release notes

    Added

    • #[inline] attributes.
    • underflow() method to Voice.

    Changed

    • Store the format in the public Voice struct.
    • WASAPI: General cleanup.
    • WASAPI: Update winapi dependency.

    Fixed

    • WASAPI: Fix the hack in the implementation.

    Removed

    • Unused extern crate libc.
    Open source →
  53. 0.2.2 11 Sep 2015
    Release notes

    Added

    • UnknownBufferType::len() method.

    Fixed

    • Null: Restore the null implementation and compile it every time.
    Open source →
  54. 0.2.1 10 Sep 2015
    Release notes

    Changed

    • Handle channels positionning.
    • Update Cargo.toml after the previous changes.
    • Examples: Update the beep example.

    Fixed

    • ALSA: Fix compilation.
    Open source →
  55. 0.2.0 10 Sep 2015
    Release notes

    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.
    Open source →
  56. 0.1.2 22 Jul 2015
    Release notes

    Fixed

    • ALSA: Correct reported sample format.
    • WASAPI: Fix samples signs on win32.
    Open source →
  57. 0.1.1 20 Jul 2015
    Release notes

    Fixed

    • Fix the version in the README.
    • WASAPI: Fix the win32 build.
    Open source →
  58. 0.1.0 11 Jul 2015
    Release notes

    Added

    • Bump to 0.1.0.
    Open source →
  59. 0.0.23 04 Jul 2015
    Release notes

    Fixed

    • WASAPI: Fix platform-specific dependencies with MSVC.
    Open source →
  60. 0.0.22 24 Jun 2015
    Release notes

    Fixed

    • ALSA: Calls to a single ALSA channel are not thread safe.
    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive